1

我觉得这些可能是基本主题,但我在其他地方找不到简洁的答案。

在构建 TCP 服务器时,我的理解是每个连接的客户端都必须连接到自己的端口以保持合理的连接性(例如,要知道消息来自客户端)。

如何设置?我假设你有一个列表和一个人们连接到的专用“入口点”套接字。连接的 Socket 会找到一个空闲端口,回复端口号,并在该端口上设置一个新的 Socket 侦听。这听起来对吗?

如果是这种情况,在我看来,条目 Socket 在侦听传入连接时需要阻塞。这个阻塞读取是在单独的线程上完成的吗?

附加的附带问题:我真的只需要一些简单的消息传递来实现我想要试验的基本 Java 游戏。像 Netty 这样的东西对于这个特殊的核桃应用程序来说似乎是一把大锤。我是否最好使用 Java 标准库编写一些漂亮且轻量级的东西?

4

2 回答 2

1

主套接字被称为“母套接字”,你阻塞它等待新的连接。当一个新的连接发生时,你使用accept()为新客户端创建一个新套接字的方法。

您可以使用Selector. 您将选择器配置为侦听母套接字以及您创建的任何其他套接字。这样,您可以让一个线程监听所有传入的通信。如果新的通信在母套接字上,则接受连接并生成一个新的套接字并将其添加到选择器中。如果新的通信在其他套接字之一上,那么您可以适当地处理该消息。

我总是编写自己的网络代码。这是一次有用的学习经历,但您也确切地知道这些事情在做什么。

于 2012-06-07T17:22:37.870 回答
1

客户端继续使用相同的 TCP 目标端口。TCP 堆栈根据 IP 地址和端口(由客户端随机选择)处理多个连接。不过,您实际上并不需要为此担心。请参阅 Oracle Java IO 教程,了解如何处理将连接移交给单独的线程,它们相当不错。

于 2012-06-07T17:27:36.577 回答