我正在使用 NIO 编写一些客户端代码来监听来自多个服务器的 UDP 数据包(其中许多服务器配置为回复同一端口)。我尝试为每个已知服务器建立专用 channel NIO. 2 clients binding to same port, only 1 can read失败了.
所以我现在尝试绑定(bind)到端口而不指定目的地
DatagramChannel channel = DatagramChannel.open();
channel.configureBlocking(false);
channel.socket().bind(new InetSocketAddress(port));
我的选择器现在成功接收从我的所有服务器定向到此端口的所有 UDP 数据包
...
SelectionKey selKey = it.next();
if (selKey.isValid() && selKey.isReadable()) {
DatagramChannel sChannel = (DatagramChannel) selKey.channel();
sChannel.getRemoteAddress();//My problem lies here
....
正如预期的那样,sChannel.getRemoteAddress() 返回 null,因为我没有配置它。那么我如何确定这个数据包的来源呢?
最佳答案
DatagramPacket 的源地址位于数据包中。请参阅 Javadoc。或者,如果您连接 DatagramChannel 或其底层 DatagramSocket,您可以从那里获取它......但不能以其他方式获取。
关于java - 如何获取NIO DatagramChannel的remoteAddress(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14808373/