C# 如何确保所需的 UDP 数据到达客户端/服务器?

Posted

技术标签:

【中文标题】C# 如何确保所需的 UDP 数据到达客户端/服务器?【英文标题】:C# How can I make sure that required UDP data gets to the client/server? 【发布时间】:2012-02-26 19:36:47 【问题描述】:

我最近一直在为我用 C# 和 XNA for PC 制作的 2D 射击游戏编写 UDP 服务器,它会在需要时更新和发送世界数据、实体数据、聊天数据等。

最近我在为玩家创造一种更换武器的方法时突然想到了一个问题;如果在发送到服务器请求更换武器的数据包丢失的情况下会发生什么?这个问题让我想到了另一个问题;如何让客户端和服务器确认接收到某些数据包或数据块?

所以,我想出了以下简单的解决方案来解决这个问题:

    服务器发送需要确认的数据包。 客户端收到数据包并发送确认数据包。 服务器检查客户端是否确认数据。如果客户端没有,重新发送数据。

建议的解决方案看起来不错,但是如果确认包丢失或发生意外情况会发生什么?

这个问题更好的解决方案是创建一个使用 TCP 和 UDP 的服务器和客户端; TCP 用于需要到达那里并按顺序/和平到达的数据,而 UDP 用于需要快速到达那里并且可以处理丢失或错误的数据?

如果 TCP/UDP 服务器和客户端是更好的选择,有哪些风险,我将如何实施?

谢谢。

【问题讨论】:

【参考方案1】:

如果你想确保数据包被传递,你需要使用 TCP。 UDP 不保证传送,但 TCP 已将其内置到协议中。

【讨论】:

您认为更好的解决方案是使用 TCP/UDP 服务器和客户端建议吗?谢谢。 @seanewar5 我不确定您是否需要同时使用两者。我只会使用 TCP。如果您遇到严重延迟,那么您可以切换到使用 TCP 进行“重要”通信,使用 UDP 进行不太重要的通信。 @seanewar5 看看这个:***.com/questions/1099672/… @seanewar5 是的,你说得对,UDP 更快。我只是说我不太确定 TCP 不够快。不过,我倾向于您最初的建议。 @seanewar5 我认为 TCP/UDP 组合非常适合您的工作。

以上是关于C# 如何确保所需的 UDP 数据到达客户端/服务器?的主要内容,如果未能解决你的问题,请参考以下文章

当用户选择“在新选项卡中打开”/“在新窗口中打开”而不是使用 html/javascript 点击时如何到达所需的页面

Apollo:所需的服务器响应形状?

c#udp检查是否有消息到达

如何在 C# api 中设置所需的参数

C#使用UDP协议开发服务端遇到的问题~~

使用 C# 发送邮件所需的信息? [关闭]