服务器套接字类如何在同一端口上为多个客户端连接提供服务?

12
使用Socket类时,需要在某个端口与服务器建立TCP连接。但是在服务器上,ServerSocket可以处理每个接受请求的多个客户端连接,并将其委派给一个线程来处理请求。但是,ServerSocket类如何能够在同一端口上接受多个tcp连接呢?
这是否意味着操作系统决定允许多少连接或最大的挂起连接数,并且应用程序可以控制它(我的意思是Java是否受到操作系统支持的最大挂起连接数的限制),而TCP规范中是否具有支持挂起连接的条款?
此致 敬礼, Keshav

请参考Stackoverflow上的此答案 - Andre Holzner
3个回答

8
一项TCP连接由一组唯一的(源IP、源端口、目标IP、目标端口)来定义。服务器绑定特定端口时,它就定义了其中两个变量。只要客户端来自不同的IP或不同的端口,这将不成为问题。此外,操作系统可以控制允许的总连接数,您的程序也可以进一步限制连接数。

这是否意味着我们实际上可以拥有“无限”的连接而不仅仅是65k? - Pacerier
不是无限的,但是IP/源端口/目的端口的组合用尽不会成为限制因素。 - zigdon
一个计算机尝试连接自身的理论极限是65536*65536 = 4294967296个连接,这是真的吗?还是我的数学出了问题... - Pacerier
大致正确 - 但请记住,您可以将多个IP地址设置到同一台计算机上。 - zigdon

3

它可以为多个客户端提供服务,您可以选择同时处理多少个客户端。

客户端和服务器之间的连接(也称为Socket)不仅由ServerIP/ServerPort标识,还由ClientIP/ClientPort/ServerIP/ServerPort标识。

您只需接受连接(并通常在不同线程中处理它们)。


默认情况下,backlog大小为50,但您可以在创建ServerSocket时设置它。

new ServerSocket(21, 100); //Create a server socket with a backlog of 100

资源:


我认为你无法控制backlog,你可以指定它但无法控制它。如果你认为你可以通过构造函数的第二个参数进行控制,则可以查看我的这个问题 - http://stackoverflow.com/questions/41309474/having-issue-with-testing-backlog-as-per-serversocketint-port-int-backlog - hagrawal7777

-1
服务器运行的操作系统使用远程端口号来区分与服务器的各种连接。

它使用4元组。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接