我创建了一个接受 TCP 连接的服务器。连接到套接字后,它循环从输入流中读取数据。
脚步:
- 我启动了我的服务器。
- 启动客户端。
现在我正在关闭客户。
然后服务器给我 SocketException Connection Reset
在从输入流中读取之前,如何检查我的客户端是否处于活动状态。
我创建了一个接受 TCP 连接的服务器。连接到套接字后,它循环从输入流中读取数据。
脚步:
现在我正在关闭客户。
然后服务器给我 SocketException Connection Reset
在从输入流中读取之前,如何检查我的客户端是否处于活动状态。
如果您的服务器获得“连接重置”,它可能正在写入已被另一端关闭的连接。用户按下“返回”按钮的浏览器就是一个很好的例子。如果这是预期情况,请忽略异常。如果它构成应用程序协议错误,请调试应用程序。
有两种方法可以检查套接字是否已连接,您可以读取或写入它,如果已连接则不会出错,如果未连接则会出错。这就是我检查套接字是否连接的方式:
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.
}
}
当 Socket 连接时,阅读器会一直等待,直到有东西要读取(message = reader.readLine())。当客户端断开连接并且 Socket 关闭时,读取器会抛出异常,因为由于流已关闭,因此无法读取任何内容。我希望这有帮助!