java - 仅在第一次运行时接收来自 Java 的 UDP 消息

标签 java udp netcat datagram

我正在使用 Java 的 DatagramSocket 将 UDP 消息从 Java 发送到本地主机上的特定端口。我用 netcat 监听这个端口:nc -ul 9122

第一次运行我的 Java 代码时(启动 nc 后)- 消息被接收并显示在我的 shell 上。在彼此运行时 - 未收到消息。只需重新启动 nc 即可。

这是我的 Java 代码:

public static void main(String[] args) throws IOException, InterruptedException {
    byte[] buf = "Hi There\n".getBytes();

    InetAddress address = InetAddress.getLocalHost();
    DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 9122);

    DatagramSocket datagramSocket = new DatagramSocket();
    datagramSocket.connect(InetAddress.getLocalHost(), 9122);
    if(datagramSocket.isConnected()) {
        datagramSocket.send(packet);
        Thread.sleep(500);
        datagramSocket.send(packet);
        Thread.sleep(500);
        datagramSocket.send(packet);

    }
}

我想念什么? 谢谢

最佳答案

这似乎是ncat的一个功能。收到一个UDP数据包后,只接受来自同源主机和端口的数据包。它类似于连接:ncat 实例仅处理来自单个客户端的数据包。

当你启动Java程序时,它会选择一个任意的本地端口,当你重新启动它时,你会得到一个不同的端口。您可以通过将固定本地端口传递给 DatagramSocket 构造函数来设置固定本地端口:

DatagramSocket datagramSocket = new DatagramSocket(12345);

关于java - 仅在第一次运行时接收来自 Java 的 UDP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62416893/

相关文章:

java - 如何找到 8 拼图的所有可能状态?

使用::write 的 C++ UDP 广播

java发送UDP包问题

tcp - 防止 netcat 中的 TCP SYN 重试(用于端口敲门)

linux - tshark 2.2.6 在某些计算机上不显示 data.text 字段

java - 类中的方法不能应用于给定类型(java)

java - 使用 Jersey 发布到服务 - "A message body writer ... was not found"

java - fragment 内旋转器基本适配器出现 NullPointerException 错误

java - 如何使用Java判断我运行的机器使用的是ipv4还是ipv6?

java - 安卓TCP服务器