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

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种网络异常连接断线检测的方法.

原文地址:https://www.cnblogs.com/chenhuadan/p/11615550.html

时间: 2024-08-01 23:00:52

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

iOS网络状态检查,网络连接中所用到的类

使用之前请从Apple网站下载示例:点击进入下载 然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了. Reachability 中定义了3种网络状态: // the network state of the device for Reachability 1.5. typedef enum { NotReachable = 0, //无连接 ReachableViaCarrie

Linux对外提供服务 网络连接 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略

应用举例: Linux上安装Tomcat后,客户端要能够访问服务器上的Tomcat 操作: 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问该端口的数据包 关键iptables和netfilter: iptables中的四表五链和堵通策略 CentOS6.7端口操作最佳实践: 查看iptables命令的帮助: iptables --help 不详细 man iptables 一般详细 手册页 info iptab

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

在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network Adapter VMnet1:VMware网络连接中Host-only模式的网络接口. VMware Network Adapter VMnet8:VMware网络连接中NAT模式的网络接口. 查看VMware的网络连接模式:桥接.NAT和Host-only 1. 假设我们已经安装好了Windows XP虚拟

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

转自:http://blog.csdn.net/pang040328/article/details/12427359 首先介绍一下VMware的网络连接方式.我们的主机通常经过物理网卡与局域网和Internet相连接,而虚拟机既已被称之为虚拟计算机,那虚拟网卡也必然存在,而如果我们想让虚拟计算机能连接到局域网或者Internet,那就必须让虚拟网卡和主机的真实物理网卡协同起来.VMware提供了三种将虚拟网卡和物理网卡捆绑起来的方式,即桥接(Bridge)模式,网络地址转换(Network A

HP C7000 Virtual Connect FlexFabric模块下Windows2008R2网络连接查看与配置

Windows2008R2网络属性查看与配置实例 前提: 1:C7000互联模块Bay1和Bay2配置FlexFabric模块 2:Enclosure Server Bay1:插有一个HP BL460g8服务器(LOM卡支持FlexFabric功能) 3:在VC中配置Server Profile赋予Bay1,配置内容包括:划分2个FlexNIC和2个FlexHBA. 具体步骤: 当我们在VC-FlexFabric中配置Ethernet Network和FCoE SAN Fabric后,将新创建的

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

VMware虚拟机上网络连接解决方案 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 从虚拟机上连接外部网络,需要设置以下几个地方. 1.服务 (1)打开命令提示符,输入services.msc,打开服务 (2)找到和VMware有关的服务,并启动这些服务,状态为"正在运行"说明已经启动,否则请启动. 点击NAT服务,点击"启动"->"确定",即可. 2.适配器设置 (1)打开"控制面

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

目录 一.概述 二.Bridged(桥接模式) 三.NAT(地址转换模式) 四.Host-Only(仅主机模式) 正文 一.概述 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式).VMnet1(仅主机模式).VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的

centos7.0设置网络连接(IP,网关DNS)

用虚拟机装了个centos7.0玩玩,安装界面比原来用的5.x发生了很大的变化,不过过程还是打通小异的,就不记录了.这次安装了一个纯净的环境,当然也没有桌面,没有网络连接,这里记录一下配置网络的过程: 1.虚拟器使用了桥接的方式,直接连接物理网络 2.cd  /etc/sysconfig/network-scripts/  #进入网络配置文件目录 3.vi  ifcfg-eno16777736  #编辑配置文件,添加修改以下内容 HWADDR=00:0C:29:8D:24:73 TYPE=Eth

负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?

负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息? 原文: https://help.aliyun.com/document_detail/127193.html?spm=a2c4g.11186623.6.606.5b7a7ee5RD6Xai 问题现象: 负载均衡后端配置TCP服务端口后,后端业务日志中频繁出现类似如下网络连接异常错误信息.经进抓包分析,发现相关请求来自负载均衡服务器,同时负载均衡主动向服务器发送了RST数据包. 问题原因: 该问题和负载均衡的健康检