记得以前Delphi/BCB里的socket编程,要判断[连接的另一方]是否断开了,只要在ondisconnect事件里处理就行了!如今在C#中,这个问题的确还是个问题哦!
首先,Socket类的Connected属性只表示最后一次I/O操作的状态,如果这之后[连接的另一方]断开了,它还一直返回true, 除非你再通过socket来发送数据。所以通过个属性来判断是行不通的!
有人说可以用Socket.Available属性来判断,msdn中说:如果[连接的另一方]断开了,它就会抛出异常。然而,这个BUG报告(
http://dam.mellis.org/2004/08/net_socket_bugs_gotchas/)却指出:msdn的说法并不完全正确,这个属性只有在少数情况下才抛出异常。所以,这一招还是行不通!
事实上,Socket.Receive()方法在[连接的另一方]断开时,它返回结果告知只读了0个字节,我们可以籍由这一点来找出答案。这个问答(
http://www.dotnet247.com/247reference/msgs/36/182526.aspx)给出了好的解决方案:可以调用Socket.Poll() 方法,为该方法的第二个参数传入SelectRead 值,如果该方法返回true, 则可以再由Socket.Receive()方法的返回值来判断, 我简要的写出代码:
Socket s = new Socket(..);
if (s.Poll(-1, SelectMode.SelectRead))
{
int nRead = s.Receive();
if (nRead == 0)
{
//socket连接已断开
}
}
分享到:
相关推荐
本实例展示了如何使用C#中的Socket类来判断网络是否断开,涵盖了Socket编程、TCP/IP协议、数据发送和接收、网络断开判断、异常处理、客户端/服务器端编程、数据编码和解码、程序设计等多个知识点。
### 判断Socket是否断开的小代码 在计算机网络编程中,Socket编程是非常基础且重要的一个环节,它使得不同机器上的程序能够通过网络进行通信。在实际应用中,我们需要经常检查Socket连接状态,确保数据能够正常收发...
在IT行业中,网络通信是不可或缺的一部分,而C#语言提供了强大的Socket编程接口,...在提供的`c#Socket断开重连.cs`源代码文件中,应包含这些功能的具体实现,读者可以通过阅读和分析代码来深入理解相关概念和技术。
本示例着重介绍如何在C#中使用Socket进行通信,并处理断开连接的事件以及实现重连功能。 首先,我们需要导入`System.Net.Sockets`命名空间,这是C#中Socket类的所在位置。下面我们将详细解析整个通信过程: 1. **...
文档内有客户端和服务端socket,实际项目中只用到了客户端,会比较详细,支持断开重连
### 利用Keep-Alive处理Socket网络异常断开的方法 #### 一、引言 在网络编程中,确保网络连接的稳定性和健壮性至关重要。在TCP/IP协议栈中,网络异常断开是一种常见现象,例如当客户端突然断电或者网络连接中断时...
下面来介绍判断非阻塞SOCKET是否已经断开的几种方法: 注意要区分不同操作系统分别进行测试, 包括WINDOWS, LINUX和UNIX会各有不同。 在WINDOWS下比较简单,可以使用FD_CLOSE事件判断SOCKET是否已经断开 view ...
在C#中,Socket类是进行网络编程的基础,允许开发者创建高性能的网络应用程序。下面将详细阐述C# Socket编程的核心概念、TCP连接的建立与关闭过程,以及示例程序中的"TheacherSever"和"StudentApp"可能代表的角色。 ...
5. **代码实现**:在压缩包中的"**c#Socket断开重连.cs**"文件,应该包含了实现上述功能的具体C#代码。可能的结构包括: - 类定义,封装了Socket对象和其他相关变量。 - 构造函数,初始化Socket和其他必要组件。 ...
在C# .NET环境中,Socket是用于网络通信的基础组件,它提供了对TCP/IP协议栈的低级别访问。本文将深入探讨如何在C# .NET中使用Socket构建一个简单实用的框架,以提升项目的可扩展性、健壮性和容错率。 首先,我们...
本文将深入探讨在Linux和Windows环境下,如何通过编程来检测Socket连接是否已断开。 首先,理解Socket的基本概念是必要的。Socket是应用层与传输层之间的接口,它允许应用程序通过TCP/IP协议栈与其他计算机进行通信...
C#中的Socket对象提供了`Connect()`方法用于建立连接,该方法在连接失败时会抛出`SocketException`。我们可以利用`try-catch`语句块来处理异常,例如: ```csharp try { client.Connect(serverEndpoint); } catch ...
在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现基于TCP/IP的socket通信。 在高并发场景下,服务器需要处理大量同时连接的客户端请求。C#中的Socket服务器通常采用多线程或异步编程模型来提高并发性能...
在.NET框架中,C#语言提供了丰富的库支持网络通信,其中Socket类是核心部分,用于实现TCP/IP协议栈中的各种网络通信。本示例“c# socket demo 已经封装成共通”聚焦于C#中如何使用Socket进行TCP通信,并且已经封装...
Socket编程在IT行业中是网络通信的基础,特别是在C#这样的编程语言中,Socket接口提供了与TCP/IP协议栈直接交互的能力。本篇文章将详细讲解C#中Socket客户端和服务端的封装,以及如何利用队列处理和实际应用示例。 ...
在这个场景中,`c#Socket客户端断线重连封装类(可直接调用).rar`提供的源代码文件`c#Socket客户端断线重连封装类(可直接调用).cs`显然是一个专门为C# WebSocket客户端设计的类,旨在处理网络连接的断开与重新...
如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动
本文将深入探讨"C# socket异步长连接"这一主题,包括其概念、工作原理以及如何在实际开发中实现。 首先,我们要理解什么是Socket。Socket是网络通信中的一个接口,它允许应用程序通过TCP/IP协议与另一台计算机进行...
在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现TCP和UDP协议的网络通信。 二、Socket工作原理 1. 创建Socket:首先,通过new关键字实例化一个Socket对象,指定使用的协议类型,如SocketType.Stream...