最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。
首先想到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连接状态,确保数据能够正常收发...
本实例展示了如何使用C#中的Socket类来判断网络是否断开,涵盖了Socket编程、TCP/IP协议、数据发送和接收、网络断开判断、异常处理、客户端/服务器端编程、数据编码和解码、程序设计等多个知识点。
本文将详细讨论如何通过Socket来判断远端网络是否已经断开,并提供一个简单的例子。 首先,我们需要理解Socket的基本概念。Socket是TCP/IP协议族中的一个抽象概念,它代表了两台机器间的通信连接。一台机器上的...
在IT行业中,网络通信是不可或缺的一部分,而C#语言提供了强大的Socket编程接口,...在提供的`c#Socket断开重连.cs`源代码文件中,应包含这些功能的具体实现,读者可以通过阅读和分析代码来深入理解相关概念和技术。
本文将深入探讨在Linux和Windows环境下,如何通过编程来检测Socket连接是否已断开。 首先,理解Socket的基本概念是必要的。Socket是应用层与传输层之间的接口,它允许应用程序通过TCP/IP协议栈与其他计算机进行通信...
socket断开判断方法 随着网络编程的普及, socket 编程也变得越来越重要。然而,在C语言中判断socket是否已经断开是一件很重要的事情。如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作...
QT提供了丰富的网络编程接口,其中包括`QAbstractSocket`类,该类包含了判断客户端断开连接的方法。 首先,`QAbstractSocket`枚举类型中的`SocketError`定义了各种可能的套接字错误。当客户端主动断开连接时,...
因此,建议在尝试发送数据时捕获`SocketException`异常来判断是否断开连接。例如: ```csharp try { clientSocket.Send(data); } catch (SocketException ex) { // 处理断开连接 } ``` 7. **实现重连功能**...
### 利用Keep-Alive处理Socket网络异常断开的方法 #### 一、引言 在网络编程中,确保网络连接的稳定性和健壮性至关重要。在TCP/IP协议栈中,网络异常断开是一种常见现象,例如当客户端突然断电或者网络连接中断时...
如果服务器未在预设时间内响应,客户端可以认为连接已断开并开始尝试重新连接。 2. 异常处理:当客户端尝试发送或接收数据时,如果抛出IOException(如连接中断),客户端应捕获这个异常,然后执行重连逻辑。 3. ...
### 如何判断SOCKET通信中,客户端在10秒内未发送数据或未收到服务器发送的数据,自动断开 在本文档中,我们将探讨一种机制,即如何在SOCKET长连接通信中判断客户端在一定时间内(例如10秒)是否收到来自服务器的...
在`onDisconnected()`中,你需要处理断开连接的情况。 4. **断线重连逻辑**:在`onDisconnected()`槽函数中,我们可以设置一个延时重试机制,避免短时间内频繁尝试连接导致资源浪费。例如,可以使用`QTimer`来控制...
librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因 librtmp长时间直播socket连接断开的原因
如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动
文档内有客户端和服务端socket,实际项目中只用到了客户端,会比较详细,支持断开重连
Android Socket连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909