2012-06-26 230 views
0

我想寫偵聽給定端口上的連接,並把插座到BlockingLinkedQueue從消費者線程將讀取郵件的服務器。我接受這種方式進入的連接:多線程處理連接

ServerSocket serverSocket = new ServerSocket(port); 
    while (true) 
    { 
     Socket socket = null; 
     socket = serverSocket.accept(); 
     queue.put(socket); 
    } 

當我嘗試從它發生,要第一個響應建立第二個連接後發送到第二個不同主機上並行連接。當我在我的代碼更改此第二連接下面列出的僅僅是拒絕:

while (true) 
    { 
     ServerSocket serverSocket = new ServerSocket(port); 
     Socket socket = serverSocket.accept(); 
     queue.put(socket); 
    } 

我的問題是:

  1. 這是什麼兩種情況之間的差異?爲什麼在第一種情況下消息被髮送到第二個主機?
  2. 我應該如何修改我的代碼,以創建我的服務器和兩臺主機之間的單獨的連接和並行處理?

回答

5

這兩種情況有什麼區別?

在第一種情況下,你使用的是同一端口的多個連接。在第二種情況下,您將丟棄服務器端口,以便拒絕任何等待的連接。

爲什麼在第一種情況下消息被髮送到第二主機?

由於代碼中的錯誤,這裏沒有顯示。

我應該如何重構我的代碼,以便在我的服務器和兩臺主機之間創建單獨的連接並且並行處理它們?

爲每個連接分配一個線程。

+0

你是對的。該錯誤是在別的地方。謝謝 ;) –