2010-09-16 58 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

相關問題