- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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 开发游戏,我正在尝试通过互联网在同一台计算机上的客户端和服务器之间进行通信,并最终在多台计算机之间进行通信。我以前可以,但现在服务器似乎没有收到来自客户端的任何数据包。我会尝试发布
我正在尝试设置/增加数据报套接字的接收缓冲区大小。我想这样做,因为在位于同一本地网络上的 PC 和 Android 设备之间发送数据时我遇到了一些随机数据包丢失,我想测试增加缓冲区大小是否会对减少此
我编写了一个非常简单的 kotlin 程序来从客户端接收图像。关键部分如下。 while (running) { try { buf = ByteA
在我的 Android 应用程序中,我发送了 UDP 数据包,并使用此代码等待特定的数据包。当它到达时,我不需要再听了。但是,它处于“接收模式”,当我调用 socket.close() 时,它会抛出异
我正在用 Java 编写一个聊天程序,我已经被这个问题困了几个小时。这是我的类,等待客户端连接到服务器。每次新客户端连接时,我都会创建一个新的 ChatClient(String name, Data
我正在编写一段 UDP 网络程序(客户端 - 服务器),但遇到了一些麻烦。 我想使用流来输入/输出数据,所以我用谷歌搜索“udp inputstream”并找到UDPInputStream和 UDPO
尽管我知道我的 UDP 数据包按预期到达(通过 Wireshark),并且关闭了 Windows 防火墙 - 我非常简单的 Java 代码从未收到任何数据包。 byte[] buffer = new
以下代码可以重现该问题: int errAt = -1; try { System.out.println("start..."); for (int i = 0; i < 400
我有一个客户端需要在特定端口上监听传入的 UDP 广播消息。我通过使用 1500 毫秒的 setSoTimeout 初始化绑定(bind)到端口的 DatagramSocket 对象来实现此目的。 w
我已经编写了简单的测试类,用于监听 Eth 并接收所有 UDP 数据包,这些数据包将转到端口 5001: public class Main { public static void main(S
我在 Lua 中为游戏编写了一个插件,它通过 UDP 数据包(512 字节)将玩家信息发送到远程服务器,远程服务器从数据包中读取数据并将所有玩家信息聚合到一个 xml 文件中(然后可以是所有玩家都可以
我使用 Java 中的 DatagramSocket 类从用 C 编写的客户端接收 udp 数据包。以下是接收代码(服务器套接字已设置): byte[] inputByte = new byte[1]
在 Linux (Ubuntu 12.04) 和 Windows 7 上调用此代码,您会得到截然不同的结果: DatagramSocket socket = new DatagramSocket(44
我正在开发一个项目,其中包含 1 个 Java 服务器、1 个 Android 客户端、1 个 Dart Web 客户端和 1 个 Java 客户端。我已经完成了 Java 服务器和客户端并可以工作。
我有一个 DatagramSocket,我在循环中接收数据,它最终停止接收数据包。我向服务器发送一条建立连接的问候消息。然后我开始按预期接收数据包。最终它停止接收。 发送服务器已验证它们仍在通过 tc
这个问题已经有答案了: Sockets: Discover port availability using Java (10 个回答) 已关闭 7 年前。 这个问题是关于数据报套接字而不是 TCP 套
我正在开发 Java UDP 应用程序。应用程序中有一个线程,其唯一的工作是监听特定端口上的服务器。 我编写应用程序时错误地假设我正在监听的服务器将始终处于运行状态;然而,这是一个错误的假设。 如果我
我创建了一个java服务器,它在特定端口上监听udp数据包,当收到数据包时,它会创建一个新线程,并将一个新的datagramsocket绑定(bind)到该端口,因此,如果它在该端口上收到10个数据包
我正在创建一个 java 多人游戏,它解决了 LAN 上客户端和服务器之间不断发送 DatagramPackets 的问题。 客户端的 DatagramSocket 将随机停止从服务器接收数据包,因此
嗨,我想循环遍历我拥有的 n 个端口的列表,并为每个端口创建一个 DatagramSocket: for(int i = 0; i socketList = new ArrayList(); soc
我是一名优秀的程序员,十分优秀!