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