2010-09-16 53 views
11

当使用Socket类时,一个服务器在某个端口上建立到服务器的TCP连接,但在服务器上,ServerSocket能够为每个接受请求处理多个客户端连接,并将其委托给线程来服务请求。但是,怎样才能让ServerSocket类在同一个端口上接受多个tcp连接。serversocket类如何在同一端口上提供多个客户端连接?

这是否意味着由操作系统来决定它允许的连接数量或允许的最大备份数量,并且这可以由操作系统上的应用程序控制(我的意思是受限于支持的最大待办事项OS)并且TCP规范中是否存在积压连接的限制?

最佳reagards,
凯沙夫

+0

参见例如[这个答案](http://stackoverflow.com/questions/3638953/do-tcp-connections-get-moved-to-another-port-after-they-are-opened/3639017#3639017)在Stackoverflow上。 – 2010-09-16 19:08:54

回答

8

TCP连接是通过一组独特的(源IP,源端口,目的IP,目的端口)的定义。由于服务器绑定到一个特定的端口,它定义了这4个变量中的两个。只要客户端来自不同的IP和/或不同的端口,它就不会成为问题。

是的,操作系统可以控制允许多少个总连接,并且您的程序可以进一步限制。

+0

这是否意味着我们实际上可以拥有*无限*连接,而不仅仅是65k? – Pacerier 2012-02-19 21:02:44

+0

没有限制,但IP /运动/ dport组合不会成为限制因素。 – zigdon 2012-02-20 18:15:48

+0

试图连接到自己的计算机是否可以具有65536 * 65536 = 4294967296自身连接的理论极限?还是我搞砸了我的数学...... – Pacerier 2012-02-20 18:43:38

-1

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

+0

它使用4元组。 – EJP 2016-11-28 23:31:03

3

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

的连接(也称为客户机和服务器之间的Socket不仅由SERVERIP/ServerPort标识,它的标识与ClientIP/CLIENTPORT/SERVERIP/ServerPort。

你只需要接受连接(和通常把他们在不同的线程)。


默认情况下,积压的大小为50,但是当你创建你ServerSocket你可以设置它。

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

资源:

+0

我不认为你可以控制'backlog',你可以指定它但不能控制它,如果你认为你可以和构造函数的第二个参数工作,那么你可以看看我的这个问题 - http ://堆栈溢出。COM /问题/ 41309474 /有-问题与 - 测试 - 积压 - 为每serversocketint端口-INT-积压 – hagrawal 2016-12-25 12:20:47

相关问题