`

如何判断Socket已断开

阅读更多

最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。

首先想到socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。

然后想到是否可以通过OutputStream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping,但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。

最后又回到socket类,发现有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,太好了,正是我需要的!

于是,下面一段代码就可以判断远端是否断开了连接:

try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}  

分享到:
评论

相关推荐

    判断Socket是否断开的小代码

    ### 判断Socket是否断开的小代码 在计算机网络编程中,Socket编程是非常基础且重要的一个环节,它使得不同机器上的程序能够通过网络进行通信。在实际应用中,我们需要经常检查Socket连接状态,确保数据能够正常收发...

    C#中用Socket实现判断网络是否断开的实例[参照].pdf

    本实例展示了如何使用C#中的Socket类来判断网络是否断开,涵盖了Socket编程、TCP/IP协议、数据发送和接收、网络断开判断、异常处理、客户端/服务器端编程、数据编码和解码、程序设计等多个知识点。

    Socket判断远端网络是否断开,简单例子

    本文将详细讨论如何通过Socket来判断远端网络是否已经断开,并提供一个简单的例子。 首先,我们需要理解Socket的基本概念。Socket是TCP/IP协议族中的一个抽象概念,它代表了两台机器间的通信连接。一台机器上的...

    c#socket断开重连

    在IT行业中,网络通信是不可或缺的一部分,而C#语言提供了强大的Socket编程接口,...在提供的`c#Socket断开重连.cs`源代码文件中,应包含这些功能的具体实现,读者可以通过阅读和分析代码来深入理解相关概念和技术。

    Linux或Windows下判断socket连接状态

    本文将深入探讨在Linux和Windows环境下,如何通过编程来检测Socket连接是否已断开。 首先,理解Socket的基本概念是必要的。Socket是应用层与传输层之间的接口,它允许应用程序通过TCP/IP协议栈与其他计算机进行通信...

    如何在C语言中判断socket是否已经断开

    下面来介绍判断非阻塞SOCKET是否已经断开的几种方法: 注意要区分不同操作系统分别进行测试, 包括WINDOWS, LINUX和UNIX会各有不同。 在WINDOWS下比较简单,可以使用FD_CLOSE事件判断SOCKET是否已经断开 view ...

    QT TCP服务端如何判断客户端已断开连接 - 北冥有鱼的博客 - CSDN博客1

    QT提供了丰富的网络编程接口,其中包括`QAbstractSocket`类,该类包含了判断客户端断开连接的方法。 首先,`QAbstractSocket`枚举类型中的`SocketError`定义了各种可能的套接字错误。当客户端主动断开连接时,...

    c# socket 通信demo 亲测可用,断开连接事件

    因此,建议在尝试发送数据时捕获`SocketException`异常来判断是否断开连接。例如: ```csharp try { clientSocket.Send(data); } catch (SocketException ex) { // 处理断开连接 } ``` 7. **实现重连功能**...

    Socket服务器端断开后重新打开,客户端将自动完成链接

    如果服务器未在预设时间内响应,客户端可以认为连接已断开并开始尝试重新连接。 2. 异常处理:当客户端尝试发送或接收数据时,如果抛出IOException(如连接中断),客户端应捕获这个异常,然后执行重连逻辑。 3. ...

    librtmp长时间直播socket连接断开的原因

    librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因

    利用Keep-Alive处理Socket网络异常断开的方法

    ### 利用Keep-Alive处理Socket网络异常断开的方法 #### 一、引言 在网络编程中,确保网络连接的稳定性和健壮性至关重要。在TCP/IP协议栈中,网络异常断开是一种常见现象,例如当客户端突然断电或者网络连接中断时...

    如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动断开.doc编程资料

    如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动

    Android socket实现Tcp长连接,断开自动重连

    手写简化版tcp长链接的socket实现,主要功能有断开重连,以及收发读取解码解析,适用于需要用到长链接的原生开发。

    C# SOCKET 客户端 主机断开自动重连

    文档内有客户端和服务端socket,实际项目中只用到了客户端,会比较详细,支持断开重连

    Android Socket连接(心跳检测,断线重连,状态监测等)

    Android Socket连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909

    c#Socket断开重连.zip

    本压缩包"**c#Socket断开重连.zip**"包含了一个使用C#实现的Socket断开重连功能的代码示例,特别关注了心跳机制的设计。下面将详细解释这些知识点。 1. **C# Socket编程**:Socket是网络通信的基础,它提供了一种...

Global site tag (gtag.js) - Google Analytics