UDP网络流量未到达目的地

台恩

新成员
已加入
2020年1月17日
留言内容
3
编程经验
10+
I'm编写在线游戏。一世've constructed a system for passing packets via serialization. For some reason, if I run the server on my local network and connect from the same PC, it works fine. But any other PC on the network and on the internet cannot seem to send packets to the server.

我尝试了端口转发,允许它通过Windows防火墙,并通过各种IP(例如本地IP,我的公共IP等)进行托管。似乎没有任何反应。是否有人对为什么尽管通过两台PC的防火墙允许并被转发到服务器的端口仍会阻止网络通信量有任何想法?我很茫然。

我几个月来一直在努力解决这个问题。我以为我前几天发现了罪魁祸首(Windows防火墙),但是那也是死路一条。我似乎没有做任何事情允许数据包到达目的地,除非它们在同一台PC上托管和运行游戏。请帮忙。

您可以向我询问您可能需要的任何代码,然后我将其发布。我非常沮丧,准备放弃我的梦想。我们已经花了一年时间开发这款游戏,但我仍然无法通过互联网成功接收数据包.....

我正在使用UDP协议,并且我知道我的代码是正确的,因为它可以在本地级别使用。我只是不知道为什么数据包没有通过网络到达目的地。我需要建议,任何可能帮助我解决此问题的建议。我知道我现在很多余,但是我快要崩溃了。感谢您提供任何帮助。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
发布重现该问题所需的最少代码。无需发布整个游戏。只需创建一个简单的控制台应用程序,即可发送和接收UDP数据包。

就个人而言,在这种情况下,我发现最常见的罪魁祸首是:
  • Windows防火墙配置
  • 防病毒防火墙配置
  • 尽管设置要求提示,但防病毒软件仍默默地阻止接受/发送数据包(是的,我正在查看您的最新版本的Avast)
  • 网络未配置为允许跨子网广播
出于好奇,您为什么要建立自己的游戏网络而不是使用库。 Lidgren或RakNet从阅读它们的资料来看都相当不错。
 

台恩

新成员
已加入
2020年1月17日
留言内容
3
编程经验
10+
好,谢谢。我没想到要删除UDP代码并单独运行它以检测问题,这是个好主意。

至于滚动自己的网络代码……老实说,我对林格伦一无所知,我总是想挑战一下自己。这次,我面临的挑战太多了,哈哈。另外,我在网上找到了一些很棒的示例,这些示例说明了如何编写一个很小的网络层来实现我想要的功能。我将尝试提取UDP代码,如果仍然无法解决该问题,我会在此处回复并张贴它,以便您查看。我非常感谢您的帮助!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
我只想指出,UDP因丢弃数据包而闻名,而从这一点来看,TCP更为可靠。很好奇,为什么仍然选择UDP?
 

台恩

新成员
已加入
2020年1月17日
留言内容
3
编程经验
10+
是的,但我不是在谈论几个数据包...。这些数据包都没有到达目的地。

至于为什么选择UDP,在线上有很多文章,据我了解,TCP / IP太慢了,无法每秒处理许多游戏更新。它还以某些方式发送数据包,直到达到一定的大小阈值,才可能发送这些数据包。 UDP更好,因为它要快得多,尽管偶尔会有丢包,但是在我每秒更新30次(我们会这样)的游戏中,丢失了几条都没关系。我只需要弄清楚是什么导致他们被封锁 :) 对于必须由客户端接收的数据包,我放置了一些响应数据包,以便服务器知道已接收到它。如果服务器/客户端没有收到响应数据包,它将在大约500毫秒后再次发送原始数据包,直到它收到响应为止(这些数据包不是游戏更新太多,它们主要是登录数据包,角色列表数据包和世界信息(因为这是一款沙盒游戏,因此会根据需要主动下载世界))。

这就是为什么 :) 如果我对这里的看法有误,请随时纠正我。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
你是对的。 TCP用于游戏的一般问题是在Internet上玩游戏时消息的吞吐量。在等待组装数据包以将数据显示为流时,往往会出现阻塞。使用UDP并接受数据包可能丢失或乱序的事实的游戏通常会更好。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
如果我对这里的看法有误,请随时纠正我。
不,您的信念或多或少是正确的。

虽然我部分同意跳伞运动员的上述看法。我想我把这个链接放在这里,因为第一段确实很好地总结了它。实际上,这是我从该网站上读到的关于该主题的更好的答案之一: UDP vs TCP,速度快多少?

在等待组装数据包以将数据显示为流时,往往会出现阻塞
我不一定同意这部分内容,因为这确实取决于您如何编写代码以及如何配置要在TCP上连接的网络。

还应注意,对数据传输的数据包大小有限制的路由器也可以阻止这些数据包,如果这是您的问题,则无法解决。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
这确实取决于您如何编写代码以及如何配置要在TCP上连接的网络。
是。如果您可以完全控制端到端的网络配置,TCP将会很棒。但是,当您开始进入各种人的特殊网络配置的狂野西部,或者试图通过超额订购的WiFi和/或Internet连接在旅馆中玩游戏的人时,事情就会变得更加艰难。

还应注意,对数据传输的数据包大小有限制的路由器也可以阻止这些数据包
还有一些个人经验,涉及到UDP代码,TCP代码以及回到UDP(使用Lidgren)并遇到大数据包大小的问题:
 
最佳 底部