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