C#Tcp服务端主动断开,客户端无法感知问题

2023-11-16

服务端使用tcplistener接收连接请求。客户端使用tcpclient.connect主动连接。

在一对一的情况下(1个服务端只连接1个客户端时),服务端调用client.Close()主动关闭连接后,客户端接收函数(revString = br.ReadString();)立马报异常,因此可通过捕获此异常来进行重连操作。

但是,当一对多的情况下(1个服务端同时连接多个客户端),服务端对所有的client调用client.Close()主动关闭连接后,经常有少数(一般是一个)客户端无法捕获上面的异常,因此就无法通过捕获异常来重连。

为了解决上述问题,我试了网上很多方法,都不能解决此问题:

1、客户端验证tcpclient.Connected,发现始终为true。失败。

2、客户端验证tcpclient.Client.Connected,发现始终为true。失败。

3、客户端验证tcpclient.Client.Poll(0, SelectMode.SelectWrite),发现始终为true。失败。

4、客户端验证tcpclient.Client.Poll(0, SelectMode.SelectError),发现始终为false。失败。

5、客户端验证tcpclient.Client.Poll(0, SelectMode.SelectRead),发现始终为false。失败。

6、客户端验证tcpclient.Available,发现始终为true。失败。

7、客户端使用tcpclient.Client.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null)。失败。

8、客户端使用tcpclient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true)。失败。

最后没办法了,只好自己写了个双向心跳。成功。
但是我想不通tcp为什么被搞得这么复杂,一个简单的重连机制都不提供吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#Tcp服务端主动断开,客户端无法感知问题 的相关文章

  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • python操作excel文件的构建

    一 使用python构建txt文件 1 应用 做最大字符长度检验 需要构架一定数量的数据 如100 200 对象 open 文件名 打开方式 encoding utf 8 with open 文件名 打开方式 encoding utf 8
  • java -jar 远程调试_Java Remote Debug(idea远程调试)

    概述 对于分布式系统的调试不知道大家有什么好的方法 对于我来说 在知道远程调试这个方法之前就是在代码中打各种log 然后重新部署 上线 调试 这样比较费时 今天咱们来了解了解Java远程调试这个牛逼的功能 本文以Intellij IDEA为
  • 云计算与大数据- 云计算概览练习题及答案

    第1章 云计算概览习题 1 1 选择题 1 下列关于云计算的说法错误的是 D A 可以提供按需使用 按量计费的服务 B 可以满足用户的弹性使用需求 C 用户可以在任意时间和地点通过网络获取所需的资源 D 主要基于非虚拟化资源池 2 以下不属
  • jdbc编程六步

    1 加载驱动 2 获取连接 3 创建预编译对象 4 执行sql 5 处理结果集 6 释放资源
  • 蓝桥杯oj 算法训练 大小写转换

    算法训练 大小写转换 时间限制 1 0s 内存限制 512 0MB 锦囊1 锦囊2 锦囊3 问题描述 编写一个程序 输入一个字符串 长度不超过20 然后把这个字符串内的每一个字符进行大小写变换 即将大写字母变成小写 小写字母变成大写 然后把
  • 数据仓库主题三-(实施篇)

    背景 如何从具体的需求或项目转换为可实施的解决方案 如何进行需求分析 架构设计 详细模型设计等 则是模型实施过程中讨论的内容 业界常用两种数据仓库建设模型思想分为两种kimball和inmon模型 具体的kimball和inmon 模型思想
  • 逻辑设计基础_第1章_初识数字逻辑

    这一个月打算学习数字逻辑设计 刚听完课 现在做一下笔记 第1章 初始数字逻辑 本节知识总结为三个方面 分别是数字逻辑的知识脉络 数字逻辑设计的用途和三种二进制编码 下面分别说明 1 1 数字逻辑的知识脉络 首先 学习逻辑代数 其次 根据逻辑
  • docker容器拷贝

    背景 当前jenkins服务器部署在内网环境 需要迁移到云服务器 版本和配置以及之前安装过的jenkins插件都需要同步迁移 方案1 使用docker commit将当前容器打包成镜像 docker commit contain id co
  • CSR867x — 蓝牙音频发射器方案(支持USB、模拟和SPDIF)

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 或进群 471144274 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就
  • 傅里叶变换公式整理

    1 一维傅里叶变换 1 1 一维连续傅里叶变换 正变换 F
  • RS485(Modbus RTU)协议

    Modbus是啥 Modbus 是一种串行通信协议 是施耐德电气为使用可编程逻辑控制器 PLC 通信而发布 是工业领域通信协议的业界标准 并且是工业电子设备之间常用的连接方式 读完好像还是不知道是啥 没关系 你只要记住一点 Modbus是与
  • LeetCode初级算法-,买卖股票数组算法

    题目 给定一个数组 prices 其中 prices i 是一支给定股票第 i 天的价格 设计一个算法来计算你所能获取的最大利润 你可以尽可能地完成更多的交易 多次买卖一支股票 JAVA class Solution public int
  • DNS的解析流程,DNS主从配置,使用httpd服务演示安全上下文值的设定(selinux),使用web服务端口的改变来演示端口的设定(selinux)

    DNS的解析流程 一 DNS的解析方式 1 正向解析 正向解析文件中存储的记录称为A记录 A记录记录着域名和IP的映射关系 2 反向解析 反向解析文件中存储的记录称为PTR指针 PTR记录着IP和域名的映射关系 二 DNS域名的分层结构 国
  • OpenCV 二维码定位与识别

    因为二维码本身含有信息 因此可以作为产品的信息载体 如 产品特征 在工业领域常用在产品入库 分拣和包装上 但常常会因为二维码图像污点 光照不均匀以及二维码图像倾斜等原因 使得二维码的识别正确率低 针对这些问题 通过学习贾老师OpenCV课程
  • 数据库查询,返回前5、10行数据

    1 SQLServer sqlserver 支持top关键字 返回前若干条数据 select top 5 from table 返回前5行数据 2 MySQL mysql 支持 limit 只能适用于mysql limit 子句用于强制 s
  • 数据分析学习

    前言 数据分析已经是我们工作离不开的一个东西 其本质上还是基于数据算法对于数据的多维度计算 数据分析概念 数据分析方法
  • Android--- UI组件AdapterView and 适配器Adapter

    Android AdapterView and Adapter 适配器 Adapter UI控件 AdapterView ListView 简单的ListView实现 图文ListView实现 ListView的监听函数 GridView
  • socket的fd是什么?fd是啥的缩写?

    socket的fd是什么 fd是啥的缩写 fd 是 file descriptor 这种一般是BSD Socket的用法 用在Unix Linux系统上 在Unix Linux系统下 一个socket句柄 可以看做是一个文件 在socket
  • 7-7

    思路 在整个二维数组上下各加上一行0 然后从左到右 一列一列进行判断 判断的是数字改变次数 这里一列一列的找是因为可以把1 6 8分解成一片一片的元素 而且1 lt 8 lt 6 不知道能看懂不 代码里去掉 输入例子 可以得到 0 0 0
  • C#Tcp服务端主动断开,客户端无法感知问题

    服务端使用tcplistener接收连接请求 客户端使用tcpclient connect主动连接 在一对一的情况下 1个服务端只连接1个客户端时 服务端调用client Close 主动关闭连接后 客户端接收函数 revString br