2012-03-16 70 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

相关问题