Java DatagramSocket.receive()问题
我使用Java中的Java DatagramSocket.receive()问题,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,我使用Java中的DatagramSocket类从用C编写的客户端接收udp数据包。下面是接收的代码(服务器套接字已设置): 然后打印内容。我的调试消息(此代码中未显示)表明它正在成功地访问receive()部分并正在等待(这是一个阻塞调用)。问题是: 此服务器仅在发送消息的客户端第二次运行时接收数据包,而不是第一次。即使客户机在第一次运行时发送多个数据包,服务器也不会在第二次运行整个客户机之前显示任何内容。假设问题出在服务器端而不是客户端,安全吗?(客户端代码不是我写的……这很恶心,而且是用C
DatagramSocket
类从用C编写的客户端接收udp数据包。下面是接收的代码(服务器套接字已设置):
然后打印内容。我的调试消息(此代码中未显示)表明它正在成功地访问receive()
部分并正在等待(这是一个阻塞调用)。问题是:
此服务器仅在发送消息的客户端第二次运行时接收数据包,而不是第一次。即使客户机在第一次运行时发送多个数据包,服务器也不会在第二次运行整个客户机之前显示任何内容。假设问题出在服务器端而不是客户端,安全吗?(客户端代码不是我写的……这很恶心,而且是用C编写的)。我会尽力给出最好的答案,但只需要看3行代码,你可能做了一些我看不到的坏事。你能发布更多的相关代码吗
在我看来,问题可能出在客户身上。还有一种可能性是,您的网络正在对UDP流量进行一些奇怪的操作(我遇到过其中一些)。如果您想找出哪一方有问题,我建议通过客户端的两次运行在服务器机器上运行,然后查看服务器机器正在接收什么类型的数据包。确保在客户端连续运行之间留出几秒钟的时间,然后筛选出有问题的UDP端口。如果第一次运行客户端时没有数据包到达服务器,那么您的问题可能出在客户端的某个地方。尝试使用数据包嗅探器,查看客户端是否第一次发送数据。+1但在服务器计算机和客户端计算机上运行Wireshark。我遇到过路由器问题,在服务器上运行跟踪意味着客户端没有发送数据包(我们没有数据包),而在客户端上运行跟踪也清楚地表明客户端正在发送数据包,但数据包在客户端和服务器之间丢失。+1数据包嗅探器是任何网络编程的宝贵工具,可以是Java、C、Haskel或Cobol语言:)
byte[] inputByte = new byte[1];
DatagramPacket recvdPacket = new DatagramPacket(inputByte, inputByte.length);
try {
serverSocket.receive(recvdPacket);