`

C#中判断socket是否已断开的方法

    博客分类:
  • C#
阅读更多
记得以前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实现判断网络是否断开的实例[参照].pdf

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

    判断Socket是否断开的小代码

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

    c#socket断开重连

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

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

    本示例着重介绍如何在C#中使用Socket进行通信,并处理断开连接的事件以及实现重连功能。 首先,我们需要导入`System.Net.Sockets`命名空间,这是C#中Socket类的所在位置。下面我们将详细解析整个通信过程: 1. **...

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

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

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

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

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

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

    C#socket C#socket

    在C#中,Socket类是进行网络编程的基础,允许开发者创建高性能的网络应用程序。下面将详细阐述C# Socket编程的核心概念、TCP连接的建立与关闭过程,以及示例程序中的"TheacherSever"和"StudentApp"可能代表的角色。 ...

    c#Socket断开重连.zip

    5. **代码实现**:在压缩包中的"**c#Socket断开重连.cs**"文件,应该包含了实现上述功能的具体C#代码。可能的结构包括: - 类定义,封装了Socket对象和其他相关变量。 - 构造函数,初始化Socket和其他必要组件。 ...

    C# .NET中Socket简单实用框架的使用教程

    在C# .NET环境中,Socket是用于网络通信的基础组件,它提供了对TCP/IP协议栈的低级别访问。本文将深入探讨如何在C# .NET中使用Socket构建一个简单实用的框架,以提升项目的可扩展性、健壮性和容错率。 首先,我们...

    Linux或Windows下判断socket连接状态

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

    c#Socket客户端断线重连

    C#中的Socket对象提供了`Connect()`方法用于建立连接,该方法在连接失败时会抛出`SocketException`。我们可以利用`try-catch`语句块来处理异常,例如: ```csharp try { client.Connect(serverEndpoint); } catch ...

    C#高并发SOCKET服务器和客户端完整工程实例源码.zip

    在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现基于TCP/IP的socket通信。 在高并发场景下,服务器需要处理大量同时连接的客户端请求。C#中的Socket服务器通常采用多线程或异步编程模型来提高并发性能...

    c# socket demo 已经封装成共通

    在.NET框架中,C#语言提供了丰富的库支持网络通信,其中Socket类是核心部分,用于实现TCP/IP协议栈中的各种网络通信。本示例“c# socket demo 已经封装成共通”聚焦于C#中如何使用Socket进行TCP通信,并且已经封装...

    C# Socket 客户端服务端封装带使用实例

    Socket编程在IT行业中是网络通信的基础,特别是在C#这样的编程语言中,Socket接口提供了与TCP/IP协议栈直接交互的能力。本篇文章将详细讲解C#中Socket客户端和服务端的封装,以及如何利用队列处理和实际应用示例。 ...

    c#Socket客户端断线重连封装类(可直接调用).rar

    在这个场景中,`c#Socket客户端断线重连封装类(可直接调用).rar`提供的源代码文件`c#Socket客户端断线重连封装类(可直接调用).cs`显然是一个专门为C# WebSocket客户端设计的类,旨在处理网络连接的断开与重新...

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

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

    C# socket异步长连接

    本文将深入探讨"C# socket异步长连接"这一主题,包括其概念、工作原理以及如何在实际开发中实现。 首先,我们要理解什么是Socket。Socket是网络通信中的一个接口,它允许应用程序通过TCP/IP协议与另一台计算机进行...

    C# 稳定的Socket组件

    在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现TCP和UDP协议的网络通信。 二、Socket工作原理 1. 创建Socket:首先,通过new关键字实例化一个Socket对象,指定使用的协议类型,如SocketType.Stream...

Global site tag (gtag.js) - Google Analytics