有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用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);

    }
}

我错过了什么? 谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

    DatagramSocket datagramSocket = new DatagramSocket(12345);