当使用 Socket 类时,在某个端口上与服务器建立 TCP 连接,但在服务器上,ServerSocket 能够为每个接受请求处理多个客户端连接,并将其委托给一个线程来处理请求。但是一个 ServerSocket 类怎么可能在同一个端口上接受多个 tcp 连接。
这是否意味着由操作系统决定它允许多少连接或允许的最大积压是多少,这是否可以由操作系统之上的应用程序控制(我的意思是java受操作系统支持的最大积压限制)并且是TCP规范中的积压连接有什么限制吗?
最好的问候,
凯沙夫
当使用 Socket 类时,在某个端口上与服务器建立 TCP 连接,但在服务器上,ServerSocket 能够为每个接受请求处理多个客户端连接,并将其委托给一个线程来处理请求。但是一个 ServerSocket 类怎么可能在同一个端口上接受多个 tcp 连接。
这是否意味着由操作系统决定它允许多少连接或允许的最大积压是多少,这是否可以由操作系统之上的应用程序控制(我的意思是java受操作系统支持的最大积压限制)并且是TCP规范中的积压连接有什么限制吗?
最好的问候,
凯沙夫
TCP 连接由一组唯一的(源 IP、源端口、目标 IP、目标端口)定义。由于服务器绑定到特定端口,因此它定义了这 4 个变量中的两个。只要客户端都来自不同的 IP 和/或不同的端口,就不会成为问题。
是的,操作系统可以控制允许的总连接数,您的程序可以进一步限制它。
它为多个客户提供服务,您可以选择同时处理多少客户。
连接(也就是Socket
客户端和服务器之间的连接)不仅由 ServerIP/ServerPort 标识,还由 ClientIP/ClientPort/ServerIP/ServerPort 标识。
您只需要接受连接(并且通常在不同的线程中处理它们)。
默认情况下,积压的大小为 50,但您可以在创建ServerSocket
.
new ServerSocket(21, 100); //Create a server socket with a backlog of 100
资源 :
运行服务器的操作系统使用远程端口号来区分与服务器的各种连接。