2014-03-28 69 views
2

所以,我不確定這裏存在什麼問題,但我試圖用Java創建一個簡單的服務器,但是每當客戶端連接時(我一直通過來自Google Chrome的本地主機請求),單個客戶端連接將連接多次。 (即每次我通過瀏覽器連接到我的服務器時,服務器打印出「用戶連接成功」2-5次)。我不確定主線程可能會如何回到循環頂部並連接到同一個客戶不止一次。Java ServerSocket多次連接到同一個套接字

... 
ServerSocket ss = new ServerSocket(9876); 
while(true) 
{ 
    Socket s = ss.accept(); 
    if(count >= queuesize || count >= numproducers) 
    { 
    System.out.println("Thread pool has reached it's limit. User access denied."); 
    //.... 
    //error message sent to user here 
    //.... 
    } 
    else 
    { 
     System.out.println("User connected successfully"); 
     for(int x=0;x<numproducers;x++) 
     { 
     if(threads.get(position).isAvailable()) 
     { 
      threads.get(x).start(s); 
      position = (position+1) % numproducers; 
      break; 
     } 
     position = (position+1) % numproducers; 
     } 
    } 
} 
+1

使用遠程登錄表示是否發生,如果你讓自己的客戶端,還是? –

+0

您是否認爲Chrome可能連接多次? (使用lsof檢查,如果您在Linux上,則查看打開的連接。) – vanza

+0

請同時分享客戶端代碼。 – Braj

回答

0

這是一種解決方法。它可能會幫助你。

  • 創建的SetMap包含哈希碼全部以低於線

    Socket s = ss.accept(); 
    
  • 現在檢查每個每當一個新的客戶端試圖連接時,連接從服務器Socket如果同一Socket然後不做任何事情或關閉套接字。

+0

我可能只是保持多個連接,因爲我意識到它不會傷害任何東西,但如果我決定不這樣做,那麼這似乎是一個偉大的解。謝謝! (我想過這樣的事情,但我沒有考慮使用集合) – Sp4mm4ge

+0

它不可能是相同的'套接字'。它始終是一個新的套接字。答案沒有意義,建議的解決方案是毫無意義的。 – EJP

0

我不知道怎麼在主線程可能可能奔回到循環的頂部,並連接到同一個客戶端不止一次。

好:

  • 你有一個接受循環,回答的那部分,並
  • 沒有什麼可形成多個連接到您
停止瀏覽器

所以它發生。

瀏覽器經常這樣做來加載嵌入的資源,如圖像,樣式表,JavaScript等