2011-05-18 37 views
-2

我在java的一個應用程序,不過是一個遠程server.The遠程服務器,我想設計,以接受兩個類型的客戶端的服務器:創建監聽在兩個不同的端口

1.Some連接在127.0 .0.1在端口6000

2,第二類型的客戶端,在127.0.0.1連接在端口6500

我該怎麼做在於:

我已經試過如下:

public class Start { 

    Socket socket=null; 
    private String serverIpAddress="127.0.0.1"; 
    static Thread cThread; 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     ThreadPooledServer server = new ThreadPooledServer(6000); 
     new Thread(server).start(); 




     cThread = new Thread(new ClientThread()); 
     cThread.start(); 

    } 

ThreadPooledServerClientThread是兩個不同的類別。

當我要開始第二個線程....這意味着該行:

cThread.start(); .... java的告訴我說:「開始的類型沒有外圍實例是可訪問的!」

根據我的意思,我不能在同一主體中啓動兩個不同的線程.....好吧,如果我不能這樣做...什麼是正確的方法來做到這一點? ..to啓動兩個線程

1.That在本地機器上偵聽端口6000

2.Second,在端口6500的本地機器上聽??​​?

更新:我想創建一個服務器,可以偵聽多個端口,當我得到一個新的連接,我想能夠告訴哪個端口連接使用!!!!!!!!!!!!

+2

您正在將它們都設置爲您的示例中的相同端口,但按設計失敗:您不能讓兩個應用程序在同一個主機:端口組合中偵聽。你的ClientThread類會發生什麼? – Piskvor 2011-05-18 17:20:06

+0

沒有沒有.....在同一主機上我有兩個線程:一個監聽端口6000,一個監聽另一個端口讓我們說61000 .....我該怎麼做,導致上述代碼definitly將無法正常工作!!!!!? – mariana 2011-05-18 17:22:53

+0

在我的ClientThread類中,我啓動線程來聽第二個線程.....但你沒有仔細閱讀....上述代碼不工作只是一個愚蠢的例子!!!!我的問題我是如何正確地做這件事的? – mariana 2011-05-18 17:24:13

回答

1

如果你想以一種有效的方式監聽多個端口(= SingleThreaded),看一看java.nio.SocketChannel和Selector可能是個好主意,但我認爲這對於低負載場景來說是過度的。

關於「式開始的無封閉情況下進行訪問。」:

既可以在構造函數中的踏板和創建類的新對象或聲明的內部類靜態的(如果它不需要訪問到外部成員)