2012-03-16 71 views
0

我正在測試一個用戶數的聊天應用程序。所以我想要的是如下:在聊天應用程序中使用單個客戶端創建多個套接字

我想通過登錄運行我的聊天應用程序只有一個用戶1000次for循環聊天。這是我的代碼的一部分。

public void LoginChatConnect() { 
    try { 

     // while(true){ 
     for(int i=0;i<1000;i++){ 
     System.out.println("inside loginChatLogin"); 
     String userId = "Rahul"; 
     String password = "rahul"; 
     sockChatListen = new Socket("localhost", 5004); 
     // /sockChatListen. 
     dosChatListen = new DataOutputStream(
       sockChatListen.getOutputStream()); 
     disChatListen = new DataInputStream(sockChatListen.getInputStream()); 
     dosChatListen.writeUTF(userId); 
     dosChatListen.writeUTF(password); 
     // System.out.println(dosChatListen.toString()); 
     dosChatListen.flush(); 


     // sockChatListen.close(); 
     boolean b = sockChatListen.isClosed(); 

     System.out.println("connection open**********************" + b); 
     sockChatListen.close(); 

     System.out.println("connection closed**********************" + b); 
     count++; 
     System.out.println("count" + count); 
     } 

    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

在上面的代碼中,我只是試圖登錄只有一個用戶1000次。但在某些登錄後,它給我這個套接字錯誤。

java.net.SocketException: Connection reset by peer: socket write error 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 

在這裏,我試圖創建一個單一的端口5004爲什麼我之後100+成功連接(登錄)得到錯誤的連接。?

我該如何解決這個問題?

任何建議將有所幫助。

回答

0

我從你的文章中瞭解到,你想模擬1000個用戶同時登錄聊天服務器。我相信你正在嘗試在你的聊天服務器上測試負載。

但是,從您的代碼中,我發現您每次都在循環中建立並關閉套接字連接。這與1000個用戶在隊列中等待並試圖一個接一個登錄服務器類似。這不會模擬併發負載,但會對服務器進行1000次連續調用,並且不適合加載測試服務器。

我的評論是基於上述的理解。如果情況並非如此,請確認。

關於你得到的例外,我不知道爲什麼它不應該嘗試100次以上。也許你需要檢查你的服務器端代碼來找出問題。

+0

好的。那麼是否有可能通過單套接字客戶端創建1000個順序連接? – Java 2012-03-16 08:54:53

+0

是的。每次隱瞞客戶端時,它都會創建一個連接到服務器的新客戶端套接字。因此,您可以同時擁有1000個實例(或任何可行數量)的客戶端應用程序來模擬併發連接。但是,僅僅立即建立和關閉連接還不夠。您可以保持連接一段時間,並與服務器交換一些任意數據以模擬併發用戶。 – Drona 2012-03-16 09:03:50

相關問題