Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在发送任何内容之前,是否需要等待UDP套接字连接?_Java_Sockets_Udp_Datagram - Fatal编程技术网

Java 在发送任何内容之前,是否需要等待UDP套接字连接?

Java 在发送任何内容之前,是否需要等待UDP套接字连接?,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,我编写了一个类,它向UDP套接字发送一些消息。我注意到,在我第一次尝试使用套接字时,它会超时。当我去做wireshark捕获时,我一直看到第一个数据包没有从我的机器发送,这导致超时,因为服务器需要有两条消息才能发送回状态。这是我的密码 DatagramSocket socketN = null; try { socketN = new DatagramSocket(); DatagramPacket connect = new DatagramPacket(connectMsg,

我编写了一个类,它向UDP套接字发送一些消息。我注意到,在我第一次尝试使用套接字时,它会超时。当我去做wireshark捕获时,我一直看到第一个数据包没有从我的机器发送,这导致超时,因为服务器需要有两条消息才能发送回状态。这是我的密码

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消息的状态。”