java - 如何获取NIO DatagramChannel的remoteAddress()

标签 java nio

我正在使用 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/

相关文章:

java - Spring CrudRepository findByInventoryIds(List<Long> inventoryIdList) - 相当于 IN 子句

java - 使用 RamdomAccesFile 和 FileChannel 对文件进行分块时出现问题

Java nio仅读取8192/433000字节

Java:如何使用 java.nio.file.FileSystem 在 zip 中创建目录

java - 线程 "main"java.nio.file.InvalidPathException : UNC path is missing hostname:/\/中出现异常

java - RabbitMQ 集群镜像队列行为

java - Android:使用 Apache 服务器将图像上传到 Web 服务时出现问题

java - 获取自 UTC 日期的 EPOCH 以来返回错误结果的毫秒数?

java - 如何在 java 中格式化 int 数字?

用于异步服务器的 Java NIO 和多线程