gpt4 book ai didi

java - 从 Java 游戏服务器到客户端的 TCP 和 UDP 连接

转载 作者:可可西里 更新时间:2023-11-01 02:50:45 26 4
gpt4 key购买 nike

我正在为一个大学项目创建一个游戏服务器,所以我这样做时没有使用任何库/框架。

经过大量研究,我希望客户端和服务器使用 UDP 协议(protocol)进行大量通信,例如角色移动和计时器,因为游戏这方面的可靠性不是那么重要,丢失的数据包可以得到补偿.

但我还想将 TCP 协议(protocol)用于游戏的其他一些方面,例如在信息到达客户端方面至关重要的 Action 和事件。

我的问题是我对一般情况下和在 Java 中使用 UDP 了解不多,根据我的理解,它与只为 TCP 使用一个开放的 Socket 对象是完全不同的。我认为客户端和服务器之间的初始连接将由 TCP 完成,然后一旦建立此连接,服务器是否应该将端口号发送回客户端,客户端将使用该端口号通过 UDP 与服务器通信?

这让我想到了拥有多个客户端的问题,是否都需要为它们分配不同的端口号才能通过 UDP 连接到服务器?那么服务器将为每个连接的客户端提供 1 个不同的端口号?

我的服务器计划是为每个客户端连接 1 个发送线程和 1 个接收线程 - 我是否能够在每个线程中处理 TCP 和 UDP 通信,或者每个客户端是否需要 4 个线程2 个用于 tcp,2 个用于 udp?

同样,这些只是我的第一个想法,我对 UDP 知之甚少,如果我的理解完全错误,请见谅!谢谢,如果有人可以帮助解决这些问题!

最佳答案

Should the server send a port number back to the client that the client will use to communicate with the server via UDP?

您可以这样做,也可以从属性文件加载它。取决于您的实现。

Do [multiple clients] all need to be allocated different port numbers to connect via UDP to the server? So the server will have 1 different port number for each client connected?

没有。服务器可以根据接收到的数据报 (UDP) 数据包上的 IP 地址来区分数据包属于哪个客户端。

Would I be able to handle both TCP and UDP communications in each of these threads or would there need to be 4 threads for each client with 2 for tcp and 2 for udp?

您不需要单独的线程来发送数据,因为这不会导致线程阻塞。只有接收会导致线程阻塞,因此您的客户端程序只需要 2 个通信线程;一个接收 TCP,另一个接收 UDP 通信。

注意:Java 确实以完全不同的方式处理 TCP 和 UDP 通信。 TCP 是您写入的流(它会自动为您处理握手和数据包丢失),而 UDP 使用 DatagramPacket用字节填充并发送的对象。

关于java - 从 Java 游戏服务器到客户端的 TCP 和 UDP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42026946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com