【发布时间】:2017-06-20 23:37:12
【问题描述】:
我正在为一个大学项目创建一个游戏服务器,所以我没有使用任何库/框架。
经过大量研究,我希望客户端和服务器使用 UDP 协议进行大量通信,例如角色移动和计时器,因为游戏这方面的可靠性并不那么重要,并且可以补偿丢失的数据包.
但我也想将 TCP 协议用于游戏的其他一些方面,例如对信息到达客户端至关重要的动作和事件。
我的问题是我对在一般情况下和 Java 中使用 UDP 知之甚少,据我了解,这与只为 TCP 拥有一个开放的 Socket 对象完全不同。我认为客户端和服务器之间的初始连接将由 TCP 完成,然后一旦建立此连接,服务器是否应该将端口号发送回客户端,客户端将使用该端口号通过 UDP 与服务器通信?
这让我想到了拥有多个客户端的问题,它们是否都需要分配不同的端口号才能通过 UDP 连接到服务器?那么服务器将为每个连接的客户端提供 1 个不同的端口号?
我的服务器计划是让每个客户端连接 1 个发送线程和 1 个接收线程 - 我是否能够在每个线程中处理 TCP 和 UDP 通信,或者每个客户端需要 4 个线程2 用于 tcp,2 用于 udp?
再一次,这些只是我最初的想法,我对 UDP 了解不多,如果我完全搞错了,很抱歉!谢谢,如果有人可以帮助解决这个问题!
【问题讨论】:
-
从阅读 the Java UDP tutorial 开始通常情况下,您的 UDP 客户端应该使用相同的端口。
-
如果你研究 UDP 和 Java,听起来很多问题都可以解决。
-
我读过这篇文章,但我不明白 UDP 的无连接性质——如果服务器从多个不同的客户端接收到所有到这个 UDP 端口的移动数据包,它如何区分哪个字符发送哪个如果没有“连接”?
-
UDP 只负责传输,但您也可以将一些元数据放入有效负载或标头中。通常使用更高层的协议(例如 RTP 和 RTCP)来解决这个问题。