Java SocketException。它为什么关闭?

时间:2014-01-26 15:58:23

标签: java sockets client

我正在尝试使用线程聊天服务器。但我的插座正在关闭,我不知道为什么会这样。

在服务器类中,我创建了一个新的ClientHandler

addHandler(new ClientHandler(this, incoming));

addHandler启动线程并将新的ClientHandler添加到服务器中的ArrayList。 incoming是客户端套接字。

public ClientHandler(Server serverArg, Socket sockArg) {
    server = serverArg;
    client = sockArg;
    System.out.println(client.isClosed());
}

之间没有任何要求
public void run() {
    try {
        System.out.println(client.isClosed());
        in = new Scanner(client.getInputStream());
        out = new PrintWriter(client.getOutputStream(), true);
        announce();
        System.out.println("Waiting for input");
        boolean done = false;
        while(!done && in.hasNextLine()) {
            System.out.println("There is input!");
            server.broadcast(clientName + ": " + in.nextLine());
        }
    } catch (Exception e) {
        System.out.println(e.toString());
    }
}

当我运行此代码时。这是输出:

false
true
java.net.SocketException: Socket is closed

为什么在创建此类之后立即关闭/在启动它之前?

2 个答案:

答案 0 :(得分:1)

在添加处理程序和调用run()方法之间,代码将关闭连接。我建议你在JDK中的close方法中添加一个断点,并查看它的调用位置。或者在添加处理程序后查看代码。

答案 1 :(得分:-1)

您可以使用wireshark或tcpdump等网络嗅探器。

要查明连接是否因服务器端而中断。

我想也许客户端关闭连接。