【问题标题】:SocketException: Connection reset after reconnectSocketException:重新连接后连接重置
【发布时间】:2013-09-24 16:59:12
【问题描述】:

如果我先启动服务器然后客户端一切正常,但是当我先启动客户端然后服务器(确保客户端能够在 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)

【问题讨论】:

  • ServerHandler.java:52 在哪里?另外,我没有看到任何readLine 电话。
  • 谁抛出异常,服务器还是客户端?
  • @Pietu1998 这只是一个代码 sn-p。
  • @user2794550 好吧,但是如果您不发布所有代码,包括引发异常的行,您认为我们如何调试您的代码?
  • @user2794550 您不能指望我们阅读您的其他问题。 “有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包括有效的代码来重现它。”编辑:我去了你的另一个问题,仍然找不到有问题的代码。

标签: java sockets exception


【解决方案1】:

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

【讨论】:

  • 说实话,我根本不关闭套接字,我该怎么办?谢谢。
  • 当程序终止时,连接被操作系统关闭,如果程序没有读取发送给它的数据,则连接被重置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多