java - DatagramSocket.receive() 问题

标签 java sockets udp datagram

我使用 Java 中的 DatagramSocket 类从用 C 编写的客户端接收 udp 数据包。以下是接收代码(服务器套接字已设置):

byte[] inputByte = new byte[1];
        DatagramPacket recvdPacket = new DatagramPacket(inputByte, inputByte.length);



        try {
            serverSocket.receive(recvdPacket);

然后打印内容。我的调试消息(此代码中未显示)表明它已成功到达 receive() 部分并正在等待(这是一个阻塞调用)。问题是这样的:

此服务器仅在发送消息的客户端运行时第二次接收数据包,而不是第一次。即使客户端在第一次运行时发送多个数据包,服务器也不会显示任何内容,直到第二次运行整个客户端。可以安全地假设问题出在服务器端而不是客户端吗? (客户端代码不是我写的……太恶心了,而且是用 C 写的)。

最佳答案

我会尽力给出最好的答案,但是只有 3 行代码可供查看,您可能会做一些我看不到的坏事。您能发布更多相关代码吗?

在我看来,问题可能出在客户端。还有一种可能是您的网络对 UDP 流量做了一些奇怪的事情(我遇到过其中一些)。如果您想隔离哪一方有问题,我建议运行 wireshark在服务器计算机上通过客户端的两次运行,然后查看服务器计算机正在接收哪种数据包。确保在客户端的连续运行之间留出几秒钟的时间,然后过滤有问题的 UDP 端口。如果在第一次运行客户端时没有数据包到达服务器,那么您的问题可能出在客户端的某个地方。

关于java - DatagramSocket.receive() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218973/

相关文章:

java - 只允许正数或空格

java - Class.forname ("name").newInstance() 与 name.class.newInstance : Difference in usage perspective

java - Java 中的嵌套枚举?

sockets - JCA 入站消息传递实现

c - 绑定(bind)地址已使用 C udp/tcp

c# - 如何找出导致 SocketException、UdpClient 的端点

Java打包机: Cannot find or load main class

java - 区分 "out of range"或 "in range, but no listening server socket"? (蓝牙)

c - 如何计算基于 linux 的 pc 上的接收数据包速率?如 pps 或 fps

c# - 在主线程中获取 UdpClient 接收数据