【发布时间】:2012-02-26 19:36:47
【问题描述】:
我最近一直在为我用 C# 和 XNA for PC 制作的 2D 射击游戏编写 UDP 服务器,它会在需要时更新和发送世界数据、实体数据、聊天数据等。
最近我在为玩家创造一种更换武器的方法时突然想到了一个问题;如果在发送到服务器请求更换武器的数据包丢失的情况下会发生什么?这个问题让我想到了另一个问题;如何让客户端和服务器确认接收到某些数据包或数据块?
所以,我想出了以下简单的解决方案来解决这个问题:
- 服务器发送需要确认的数据包。
- 客户端收到数据包并发送确认数据包。
- 服务器检查客户端是否确认数据。如果客户端没有,重新发送数据。
建议的解决方案看起来不错,但是如果确认包丢失或发生意外情况会发生什么?
这个问题更好的解决方案是创建一个使用 TCP 和 UDP 的服务器和客户端; TCP 用于需要到达那里并按顺序/和平到达的数据,而 UDP 用于需要快速到达那里并且可以处理丢失或错误的数据?
如果 TCP/UDP 服务器和客户端是更好的选择,有哪些风险,我将如何实施?
谢谢。
【问题讨论】:
标签: c# tcp xna udp reliability