Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 DatagramSocket.receive()问题_Java_Sockets_Udp_Datagram - Fatal编程技术网

Java DatagramSocket.receive()问题

Java DatagramSocket.receive()问题,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,我使用Java中的DatagramSocket类从用C编写的客户端接收udp数据包。下面是接收的代码(服务器套接字已设置): 然后打印内容。我的调试消息(此代码中未显示)表明它正在成功地访问receive()部分并正在等待(这是一个阻塞调用)。问题是: 此服务器仅在发送消息的客户端第二次运行时接收数据包,而不是第一次。即使客户机在第一次运行时发送多个数据包,服务器也不会在第二次运行整个客户机之前显示任何内容。假设问题出在服务器端而不是客户端,安全吗?(客户端代码不是我写的……这很恶心,而且是用C

我使用Java中的
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);