0

如果我先启动服务器然后客户端一切正常,但是当我先启动客户端然后服务器(确保客户端能够在 svr 崩溃然后再次上线时连接)客户端确实连接到服务器,但在 2.3 秒后它会抛出一个 SocketException:连接重置。我不知道是什么原因造成的,如果有人可以帮助我解决这个问题,我会非常感激。

处理客户端的服务器代码:

public ServerHandler(Socket socket){
    try{
        pw = new PrintWriter(socket.getOutputStream());
        writerHolder[userCounter] = pw;

        InputStreamReader in = new          InputStreamReader(socket.getInputStream());
        reader = new BufferedReader(in);


        userCounter++;// Increment the number of people connected

    }catch(Exception ex)
    {
        ex.printStackTrace();
    }
}

连接到服务器的客户端代码:

    private  void startConnection()
{
    try
    {
        sock = new Socket("192.168.1.5", 5000);
        InputStreamReader input = new InputStreamReader(sock.getInputStream());
        reader = new BufferedReader(input);
        pw = new PrintWriter(sock.getOutputStream());
        JOptionPane.showMessageDialog(null, "Connected to the server!");

    }catch(IOException ex)
    {
        //timer.reconnectTimer(20);
        ex.printStackTrace();
    }
}

堆栈跟踪:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at homeControl.ServerHandler.run(ServerHandler.java:52)
at java.lang.Thread.run(Unknown Source)
4

1 回答 1

1

“连接重置”通常意味着远程端关闭其套接字端而不读取您发送的数据。确保在关闭套接字之前读取发送给您的数据。

于 2013-09-24T17:14:04.310 回答