【问题标题】:Creating multiple sockets using single client in chat application在聊天应用程序中使用单个客户端创建多个套接字
【发布时间】:2012-03-16 08:37:27
【问题描述】:

我正在测试一个聊天应用程序的用户数量。所以我正在尝试如下:

我正在尝试通过登录来运行我的聊天应用程序,以便在 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 多个成功连接(登录)后出现错误。?

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

任何建议都会有所帮助。

【问题讨论】:

    标签: java multithreading sockets port


    【解决方案1】:

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

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

    我的 cmets 基于上述理解。如果不是这种情况,请纠正。

    关于你得到的异常,我不知道为什么在 100 多次尝试后它不应该工作。可能您需要检查服务器端代码以找出问题所在。

    【讨论】:

    • 好的。那么单套接字客户端是否可以创建 1000 个顺序连接?
    • 是的。每次实例化您的客户端时,它都会创建一个连接到您的服务器的新客户端套接字。因此,您可以同时拥有 1000 个客户端应用程序实例(或任何可行数量)来模拟并发连接。但是,仅仅立即建立和关闭连接是不够的。您可以保持连接一段时间并与服务器交换一些任意数据以模拟并发用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2020-03-21
    • 2016-07-03
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多