2011-02-16 157 views
4

我想弄清楚如何創建一個Java程序,可以偵聽多個端口並根據客戶端所說的端口執行不同的操作。服務器偵聽多個端口[Java]

我已經看到和了解基本的客戶機 - 服務器程序: http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/

只是重申,我要創造這種相同的關係,但不是服務器只聽一個端口上,並執行一個動作時,它接收輸入,我希望它監聽多個端口,並根據客戶端連接和發送數據的端口執行不同的操作。

我希望將來每個端口都接受GET和PUT命令,但現在我只想弄清楚如何設置服務器的基本結構,以便能夠聽取多個端口。我嘗試了谷歌搜索,但我似乎無法找到太多,所以任何幫助表示讚賞。

在此先感謝。 -Anthony

回答

2

一個套接字只能打開到一個特定的端口,所以你需要多個服務器套接字(例如每個端口1個套接字)。 I 認爲您還需要每個套接字一個線程,以便一個套接字上的網絡活動不會干擾其他套接字上的活動。

您是否正在實施服務器作爲學術練習?如果沒有,我真的真的真的真的強烈建議使用已有的服務器,如Tomcat

0

你當然可以打開多個服務器套接字。

你可能也想看看可以幫助你實現協議的jboss netty。

6

你提到的教程是非常基本的。不能使用線程編寫任何合理的服務器。爲了有兩個服務器插槽,您必須生成一個新的線程爲每個端口,像這樣的(僞):

new Thread() { 
    public void run() { 
     ServerSocket server = new ServerSocket(6788); 
     while(true) { 
      Socket client1 = server.accept(); 
      //handle client1 
     } 
    }.start(); 

和(注意不同的端口):

new Thread() { 
    public void run() { 
     ServerSocket server = new ServerSocket(6789); 
     while(true) { 
      Socket client1 = server.accept(); 
      //handle client2 
     } 
    }.start(); 

client1client2您可以單獨處理它們的插座。此外,處理客戶端連接應該在不同的線程中完成,以便可以爲多個客戶端提供服務。當然,這段代碼引入了大量的重複,但將其視爲一個起點。

要包裝 - 如果你的目標是實現HTTP GET和PUT,使用servlet並擺脫所有這些喧囂。

+0

請注意,該代碼將只接受每個端口一個連接。在此之後的某個隨機時間,相關的ServerSocket將被垃圾收集並關閉。這通常不是編寫TCP服務器的正確方法。 – EJP 2011-02-17 00:45:33