Java 在发送任何内容之前,是否需要等待UDP套接字连接?
我编写了一个类,它向UDP套接字发送一些消息。我注意到,在我第一次尝试使用套接字时,它会超时。当我去做wireshark捕获时,我一直看到第一个数据包没有从我的机器发送,这导致超时,因为服务器需要有两条消息才能发送回状态。这是我的密码Java 在发送任何内容之前,是否需要等待UDP套接字连接?,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,我编写了一个类,它向UDP套接字发送一些消息。我注意到,在我第一次尝试使用套接字时,它会超时。当我去做wireshark捕获时,我一直看到第一个数据包没有从我的机器发送,这导致超时,因为服务器需要有两条消息才能发送回状态。这是我的密码 DatagramSocket socketN = null; try { socketN = new DatagramSocket(); DatagramPacket connect = new DatagramPacket(connectMsg,
DatagramSocket socketN = null;
try {
socketN = new DatagramSocket();
DatagramPacket connect = new DatagramPacket(connectMsg, connectMsg.length, ipAddr, port);
socketN.send(connect);
socketN.setSoTimeout(5000);
DatagramPacket start = new DatagramPacket(startMsg, startMsg.length, ipAddr, port);
DatagramPacket status = new DatagramPacket(status, status.length);
socketN.send(start);
socketN.receive(status);
} catch (InterruptedException | IOException e) {
e.printStackTrace();
} finally {
socketN.close();
}
根据代码和我的wireshark捕获,我可以看到消息开始从我的PC发送,但看不到消息connect。此代码块会重复多次,因此在其他重复的时间不会出现超时。UDP中没有连接消息,除非它是应用程序协议的一部分。因此,您的问题的答案也是应用程序协议的一部分,只有您可以回答。如果您想建立这样的固定连接,那么您可能应该使用TCP而不是UDP。因为UDP的设计方式可能导致数据包丢失,并且您不能保证您的消息将被客户端或服务器接收。在wikipedia页面中,“UDP不保证上层协议的消息传递,UDP层在发送后不保留UDP消息的状态。”