我正在使用Java中的DatagramSocket
类来接收来自用C编写的客户端的udp数据包。这是接收的代码(已经设置了服务器套接字):
byte[] inputByte = new byte[1];
DatagramPacket recvdPacket = new DatagramPacket(inputByte, inputByte.length);
try {
serverSocket.receive(recvdPacket);
然后打印内容。我的调试消息(未在此代码中显示)表明它已成功进入receive()
部分并正在等待(这是阻塞呼叫)。这是问题所在:
此服务器仅接收发送消息的客户端第二时间的数据包,而不是第一个。即使客户端在第一次运行时发送多个数据包,服务器也不会显示任何内容,直到第二次运行整个客户端。假设问题出在服务器端而不是客户端是否安全? (客户端代码不是由我写的......这很恶心,而且在C中)。
答案 0 :(得分:2)
我会尽力给出最好的答案,但只需要3行代码,你可能会做一些我看不到的坏事。你能发布一些相关的代码吗?
听起来像问题可能在客户端。你的网络也有可能为UDP流量做一些时髦的事情(我遇到过其中的一些)。如果你想确定哪一方有问题,我建议通过客户端的两次运行在服务器上运行wireshark,然后看看服务器机器正在接收什么类型的数据包。确保在连续运行客户端之间给出几秒钟,然后过滤掉相关的UDP端口。如果在第一次运行客户端时没有数据包到达服务器,那么您的问题可能在客户端的某处。