Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

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_Networking_Tcp_Tcpsocket - Fatal编程技术网

Java SocketException连接重置

Java SocketException连接重置,java,sockets,networking,tcp,tcpsocket,Java,Sockets,Networking,Tcp,Tcpsocket,我创建了一个接受TCP连接的服务器。连接到套接字后,它将循环从输入流读取数据 步骤: 我启动了服务器 启动客户端 现在我要结案了 然后服务器给我SocketException连接重置 在读取输入流之前,如何检查我的客户端是否处于活动状态。有两种方法可以检查套接字是否已连接,您可以对其进行读取或写入,如果已连接,则不会出现错误;如果未连接,则会出现错误。以下是检查插座是否已连接的方法: BufferedReader reader; public void run() { try

我创建了一个接受TCP连接的服务器。连接到套接字后,它将循环从输入流读取数据

步骤:

  • 我启动了服务器
  • 启动客户端
  • 现在我要结案了

    然后服务器给我SocketException连接重置


    在读取输入流之前,如何检查我的客户端是否处于活动状态。

    有两种方法可以检查套接字是否已连接,您可以对其进行读取或写入,如果已连接,则不会出现错误;如果未连接,则会出现错误。以下是检查插座是否已连接的方法:

    BufferedReader reader;
    
    public void run()
    {
        try
        {
            String message;
            while((message = reader.readLine())!=null) //The thread stops here untill the reader has somthing to read
            {
                System.out.println(message);
            }
         }catch(Exception e)
         {
             System.out.println("Client disconnected!");
             // an error is thrown when reader cannot read the stream because it is closed, you will get a connection reset error.
         }
    }
    

    当连接套接字时,读取器将等待,直到出现要读取的内容(message=reader.readLine())。当客户端断开连接并且套接字关闭时,读取器会抛出一个异常,因为流已关闭,因此无法读取任何内容。我希望这有帮助

    如果您的服务器得到“连接重置”,它可能正在写入另一端已关闭的连接。用户按下“后退”按钮的浏览器就是一个很好的例子。如果这是预期的情况,请忽略异常。如果它构成应用程序协议错误,请调试应用程序。

    请向我们展示您迄今为止所做的工作。什么是服务器端,什么是客户端。还可以粘贴堆栈跟踪,以便更好地了解问题的实质。您还需要使用一些代码示例来了解您在服务器中的具体操作。您还可以使用
    socket.isConnected()
    socket.isClosed()
    方法来检查套接字是否仍然打开。实际上,如果你读了这些方法的描述,它说返回值是这个;如果在某个时间点连接了套接字,则返回true,否则返回false。这是一个可以执行的测试,将客户端连接到服务器,当客户端断开连接并抛出错误时,检查这两个方法的返回值,它们都将返回true。@Anantha Sharma:不,这是完全错误的。这些方法告诉您是调用了connect()还是close()。不是另一端所做的。我只是在@John Detter提到的场景中检查了这些方法,我发现你们都是对的。。这些方法仅显示服务器端发生的情况(如果您关闭了连接或未关闭连接),而不是相反。。我想找到答案的唯一方法就是试着去读一些东西&寻找一个例外。@Anantha Sharma他们告诉你在你身边发生了什么,就像我说的;正如@johndetter所说,你既可以读也可以写。不是你在这里说的。