2011-12-16 76 views
1

如何做一個Web服務器使用同一端口(80)TCP連接成爲其客戶。對於UDP連接,我知道本身沒有連接,所以我們可以讓多個客戶端將數據包發送到相同的端口。如果我嘗試使用我的本地主機上已經使用的端口,我得到BindException。所有請求如何使用相同的端口連接到Web服務器?

一種解決方案我看到該被啓動線程爲每個連接,但是這難道不是很麻煩爲網站像谷歌/雅虎那裏在每個服務器中的> 100000連接?

做web服務器採用了這個問題有什麼解決辦法?

+0

所以你想在同一個端口上有很多的UDP數據包?來自不同的客戶? – SuperTron 2011-12-16 21:53:20

+0

沒有。這只是與UDP的比較。我的主要問題是關於它如何在TCP連接中完成 – 2011-12-16 22:16:12

回答

2

服務器偵聽在一個熟知的端口(80)上,並在請求發送給工作套接字後將請求委託給工作套接字,這樣就可以爲下一個請求提供服務,你可以編寫自己的簡單服務器來了解發生了什麼事情。前充足的代碼。 [1]

[1] http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServer.java

第一它創建一個服務器套接字;

ServerSocket ss = new ServerSocket(port); 

然後在指定的端口上列表並在接受請求後創建一個新的套接字;

Socket s = ss.accept(); 

如上代碼所示,它有一個工人線程池,所以在給定的時刻,你可以控制的要求數量得到由服務器在給定時間提供服務。其他人可能會在隊列中等待。

2

時,纔會獲得一個監聽端口,但連接有兩個端口,一個在連接的兩端。這個零件必須是唯一的。

所以,說你連接到google.com 80端口,那麼你的連接將有你的機器上的一些端口,說在google.com 42312和端口80。你可以看到你的連接netstat -a。要獲得較短的列表:netstat -an | grep的ESTABLISHED」用於顯示所有已建立的連接,而不解決他們的IP地址爲名稱。