c# - 在本地主机上测试 UDP

标签 c# sockets testing networking udp

我目前正在尝试制作一个在线视频游戏,该游戏当前使用 TCP 发送数据包。我想使用 UDP,但我对 UDP 非常陌生,而且我遇到了一些问题。

当我在同一台计算机(本地主机)上测试我的服务器/客户端时,数据包似乎相互干扰。

例如,如果客户端向服务器发送数据包(UDP,127.0.0.1:1338),客户端最终会收到数据包,因为客户端也在端口 1338 上监听来自 127.0.0.1 的数据包。类似地,当我尝试测试 2 个客户端和 1 个服务器时,客户端可能会发送数据包给服务器,但被另一个客户端接收。

由于所有数据包都从 127.0.0.1:1338 接收/发送到 127.0.0.1:1338,我如何在本地主机上测试 UDP?我是否需要在我的数据包中实现某种层来区分数据包是针对服务器还是特定客户端?

最佳答案

只有您的服务器应该监听定义的端口号 (1338)。每个客户端应选择一个空闲端口号并将该端口号发送给服务器。服务器必须存储客户端信息,然后将数据包发送到此客户端列表中的客户端。

客户端还应该在客户端关闭时发送一个 goodby 数据包,以便在服务器端知道哪些客户端仍然可用,哪些不再参与。

您还应该在此客户端列表中实现某种内部管理。例如,存储从客户端接收到的最后一个数据包的时间戳,并从列表中删除一段时间未发送数据的客户端(崩溃的客户端、丢失的连接……)。

关于c# - 在本地主机上测试 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18584679/

相关文章:

c# - 使用 cx_freeze 进行精细编译后出现 "import clr"问题

c# - mongodb C# 驱动程序中缺少 FindAndModify

将 float 数据转换为必须通过 UDP 发送的 Char 数据

node.js - Socket.io 不与 express 共享 session

javascript - 如何在 puppeteer 中导航 dom 元素?

c# - .net 桌面应用程序 - 如何存储/更改应用程序设置或连接字符串?

基于类型的 C# 观察者?

c++ - Linux 系统不允许创建套接字,因为 "Too many open files"*即使在重新启动后*

java - 使用 Maven 进行集成测试的最佳实践?

java - Time2Test(带用户输入)