gpt4 book ai didi

java - DatagramSocket 暂时停止接收数据包(Java)

转载 作者:行者123 更新时间:2023-12-04 00:23:09 25 4
gpt4 key购买 nike

我在 Lua 中为游戏编写了一个插件,它通过 UDP 数据包(512 字节)将玩家信息发送到远程服务器,远程服务器从数据包中读取数据并将所有玩家信息聚合到一个 xml 文件中(然后可以是所有玩家都可以在网络上查看,这样他们就可以看到彼此的当前状态)。

我已经用 Java 使用 DatagramSocket 对服务器进行编程来处理传入的数据包,但是我注意到一些奇怪的行为。一段时间后,DatagramSocket 似乎暂时停止接受连接大约 10-12 秒,然后再次恢复正常行为(我可以看到没有抛出异常)。客户端发送数据包的频率与此行为发生的速度之间肯定存在关系。如果我增加客户端的更新频率,DatagramSocket 将更快“失败”。

值得一提的是,每个接收到的数据包都会产生一个线程来处理数据包中的数据。如果它有所作为,我将在 Linux 上运行服务器!

有谁知道是什么导致了这种行为的发生?

安德鲁

最佳答案

UDP 是一种完全没有传递保证的网络协议(protocol)。沿途任何位置的任何网络组件(包括客户端和服务器 PC 本身)都可以出于任何原因决定丢弃数据包,例如高负载或网络拥塞。

这意味着您必须进行一些探索才能找出数据包丢失发生的位置。您可以使用 wireshark 之类的工具来查看数据包是否到达服务器。

如果可靠传输比低延迟更重要,请切换到 TCP。如果您坚持使用 UDP,则无论您是否在这个特定时间修复了这个特定问题,都必须允许数据包丢失。

关于java - DatagramSocket 暂时停止接收数据包(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com