Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SocketException:重新连接后连接重置_Java_Sockets_Exception - Fatal编程技术网

Java SocketException:重新连接后连接重置

Java SocketException:重新连接后连接重置,java,sockets,exception,Java,Sockets,Exception,如果我先启动服务器,然后启动客户端,一切正常,但是当我先启动客户端,然后启动服务器时(确保客户端能够在svr崩溃时连接,然后再次联机),客户端确实连接到服务器,但在2,3秒后,它抛出一个SocketException:连接重置。我不知道是什么原因造成的,如果有人能帮我解决这个问题,我会非常感激的 处理客户端的服务器代码: public ServerHandler(Socket socket){ try{ pw = new PrintWriter(socket.getOut

如果我先启动服务器,然后启动客户端,一切正常,但是当我先启动客户端,然后启动服务器时(确保客户端能够在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这只是一个代码片段。@user2794550好吧,但如果你不发布所有代码,包括引发异常的行,你认为我们如何调试你的代码?@user2794550你不能指望我们阅读你的其他问题。“有关您编写的代码问题的问题必须在问题本身中描述具体问题,并包括复制问题的有效代码。”编辑:我转到了您的另一个问题,但仍然找不到有问题的代码。老实说,我根本不关插座,我该怎么做?感谢s。当程序终止时,操作系统将关闭连接,如果程序没有读取发送给它的数据,则连接将重置