来自 Java 的 UDP 消息仅在第一个 运行 收到
UDP messages from Java are received only on first run
我正在使用 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 程序时,它将 select 一个任意的本地端口,当您重新启动它时,您将获得一个不同的端口。您可以通过将其传递给 DatagramSocket
构造函数来设置固定的本地端口:
DatagramSocket datagramSocket = new DatagramSocket(12345);
我正在使用 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 程序时,它将 select 一个任意的本地端口,当您重新启动它时,您将获得一个不同的端口。您可以通过将其传递给 DatagramSocket
构造函数来设置固定的本地端口:
DatagramSocket datagramSocket = new DatagramSocket(12345);