我写了一个类,它将一些消息发送到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发送而不是消息连接。这段代码重复了很多次,所以在其他时候会重复,不会发生超时。