C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)

在使用 TcpClient 网络连接中常常会发生客户端连接异常断开, 服务端需要设置检测手段进行这种异常的处理;
1、对于短连接,
通过对 Socket 属性ReceiveTimeout 和 SendTimeout 设置适当的值, 当在进行读/写时超时, 则会产生 SocketException 异常, 通过检查这个异常并进行处理. 如下服务端连接处理代码示例:

Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, true);     //必须先启用接收超时选项,设置接收超时才有用。

Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, true);     //必须先启用发送超时选项,设置发送超时才有用。

Socket.ReceiveTimeOut=10000;//毫秒

Socket.SendTimeOut=10000;//毫秒

2、对于长连接

可以通过 Socket 中的心跳检测机制进行处理.

Socket的底层IO一般通过 WSAIoctl 函数进行设置. C# 中对此函数进行了封装, 即Socket.IOControl 方法.

publicint IOControl(

IOControlCode ioControlCode,

byte[] optionInValue,

byte[] optionOutValue

)

其中第一个参数为 Socket IO 控制代码; 第二个参数为传入参数值, 第三个参数为传出值.

在Winsock 2 中定义了许多 Socket IO 控制类型 , 其中有一项: KeepAliveValues , 控制 TCP keep-alive 数据包的发送以及发送间隔。默认值为2个小时, 当间隔时间超过这个设定后, socket就会连续发送5次连接信号, 若客户端无回应, 则此 client socket会断开.

我们可以如下调整这个间隔时间:

newClient.Client.IOControl(IOControlCode.KeepAliveValues,BitConverter.GetBytes(120), null); // 设置为 2分钟.

以上即为2种网络异常连接断线检测的方法.

C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)的更多相关文章

  1. 解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误

    在调试一块全志A83T安卓工控板(已root),启动后,安卓系统正常,设置好以太网 的静态IP地址:192.168.1.181,并接好网线,同时开发电脑WIN7系统IP地址 也是129.168.1.x ...

  2. VMware Workstation中网络连接之桥接、NAT和Host-only

    在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...

  3. vmware中三种网络连接方式

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note vmw ...

  4. vmware中三种网络连接方式(复制)

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

  5. LTE Module User Documentation(翻译10)——网络连接(Network Attachment)

    LTE用户文档 (如有不当的地方,欢迎指正!) 16 Network Attachment(网络连接)   正如前面章节 Basic simulation program 所述,连接用户到基站时通过调 ...

  6. Win7+VMware Workstation环境下的CentOS-Linux网络连接设置

    Win7+VMware Workstation环境下的CentOS-Linux网络连接设置 http://blog.sciencenet.cn/blog-430991-507041.html   近日 ...

  7. [转载]VMWare网络连接透析

    http://blog.csdn.net/struggleyb/article/details/1102214 以前在学校,VMWare里面的Gentoo Linux是采用network bridge ...

  8. VMware虚拟机上网络连接解决方案

    VMware虚拟机上网络连接解决方案 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 从虚拟机上连接外部网络,需要设置以下几个地方. 1.服务 (1)打开 ...

  9. vmware虚拟机三种网络连接方式

    一.概述 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“ ...

随机推荐

  1. AI-图像基础知识-02

    目录 图像坐标系 图像数字化 图像坐标系     在前面的数据标注文章中讲述如何进行标注,而标注后会保留4个坐标点,那么这些坐标点如何表示在图片中的位置?要表示一个点或图形的位置,就需要涉及到坐标系的 ...

  2. Nginx+lamp构建动静分离项目

    一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...

  3. java lambda表达式检查list集合是否存在某个值

    import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ...

  4. 排序算法-桶排序(Java)

    package com.rao.sort; import java.util.*; /** * @author Srao * @className BucketSort * @date 2019/12 ...

  5. ESP8266 SDK开发: 开发环境搭建

    前言 这节安装下编程软件, 可以去官网下载, https://wiki.ai-thinker.com/ai_ide_install 也可以安装我提供的(我使用的为官方以前版本) 建议安装我提供的,有问 ...

  6. 剑指offer 面试题8:二叉树的下一个节点

    题目:给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左.右节点的指针,还有一个节点指向父节点的指针. 中序遍历序列是{d,b,h,e,i,a,f,c,g} ...

  7. T1 :最小值(min)题解 ——2019.10.15

    思路: 对于 % 30 的数据,可以想到一个 Dp 方程: 其中dp[i]表示分割[1,i]的最大答案 代码: #include<cstdio> #include<cstring&g ...

  8. 洛谷 P4427

    传送门 洛谷P4427 题意: 给你一个数,然后让你求这两个数之间的点的深度的k次方和. #思路: 很容易想到lca.因为lca可以说是求树上两个点的距离的好方法.而且lca还能遍历每一个点. 然后我 ...

  9. C语言博客作业2019-04--数组

    0.展示PTA总分(0----2) 展示3张关于"数组题目集"分数截图. 1.本章学习总结(2分) 1.1 学习内容总结 整理数组这章学习主要知识点,必须包含内容有: 数组中如何查 ...

  10. 虚拟化原理到K8s实践经验路线总结

    以下这些内容均为自行学习总结的内容,很多内容没有写概括介绍,看起来可能会有些突兀,但并不影响整体性,我自己的学习经验告诉我,这些内容还仅仅是最精简的核心部分,周边还有很多可扩展内容,主要是操作系统生态 ...