在聊天应用程序中使用单个客户端创建多个套接字

时间:2012-03-16 08:37:27

标签: java multithreading sockets port

我正在为多个用户测试聊天应用程序。所以我想要的是:

我正在尝试通过登录来运行我的聊天应用程序,只有一个用户在for循环中进行1000次聊天。这是我的代码部分。

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次成功连接(登录)后收到错误。?

我应该如何恢复这个问题?

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我从您的帖子中了解到,您希望模拟同时登录聊天服务器的1000个用户。我相信您正在尝试测试聊天服务器上的负载。

但是,从您的代码中,我看到您每次都在循环中建立和关闭套接字连接。这类似于1000个用户在队列中等待并尝试一个接一个地登录到服务器。这不会模拟并发负载,而是对服务器进行1000次连续调用,并且不适合加载测试服务器。

我的评论是基于上述理解。如果不是这种情况,请加油。

关于你得到的例外情况,我不知道为什么它在100次尝试之后不应该起作用。您可能需要检查服务器端代码以找出问题。