调用 Socket.Receive 后,C# Socket.Connected 属性更改为 false

2023-12-01

int readCount;
byte[] buffer = new byte[128];
SocketError socketError;

TcpClient tcpClient = tcpListener.AcceptTcpClient();
tcpClient.Client.ReceiveTimeout = 500; // #1
// tcpClient.Client.Connected is **true** here.
readCount = tcpClient.Client.Receive(buffer, 0, buffer.Length, SocketFlags.None, out socketError); // reacCount > 0
// tcpClient.Client.Connected is **false** here.

如果#1 替换为tcpClient.Client.Blocking = false;,tcpClient.Client.Connected 具有正确的值(true)。


我已经设置了Socket.ReceiveTime属性设置为 100 并调用Socket.Receive(). Receive()返回大于零的整数值。没有出现异常。 在我使用复制的缓冲区完成工作后 - 我没有使用任何与 Socket 相关的方法 - Socket.Connected 属性已更改为 false。 为什么?


关键可能在于什么TcpClient.Connected确实如此:

Connected 属性获取 客户端套接字的连接状态自上次 I/O 操作以来。当它 返回 false,客户端套接字是 要么从未连接,要么没有 连接时间更长。

因为只有 Connected 属性 反映连接的状态 截至最近一次操作,您 应该尝试发送或接收 消息来确定当前 状态。消息发送失败后, 该属性不再返回 true。 请注意,此行为是设计使然。 您无法可靠地测试 连接,因为,在时间 在测试和发送/接收之间, 连接可能已丢失。 您的代码应该假设套接字是 连接并优雅地处理 传输失败。

因此,当您没有阻塞并且检查 Connected 值时,读取可能尚未完成,因此 Connected 仍处于旧值。

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

调用 Socket.Receive 后,C# Socket.Connected 属性更改为 false 的相关文章

  • Windows 窗体中的切换开关控件

    我正在设计一个拨动开关控制使用CheckBox 但目前我的控件只能画一个圆圈 如何绘制如下图所示的圆形形状 以及如何根据控件的值更改圆圈的位置以表示选中和未选中的状态 如下图所示 这是我的代码 public class MyCheckBox
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • 合并多边形的高效算法

    我有一个多边形列表 在这个列表中 一些多边形重叠 或者接触其他多边形 我的任务是合并所有相互重叠或接触的多边形 我有一个union执行此操作的方法 做到这一点最有效的方法是什么 我目前能想到的是循环遍历多边形列表 检查合并列表以查看该多边形
  • 从 C# 访问 COM vtable

    C 中有没有办法访问 COM 对象的虚拟方法表以获取函数的地址 经过大量搜索和拼凑不同的部分解决方案后 我弄清楚了如何做到这一点 首先 您需要为您尝试访问的对象定义 COM 组件类 ComImport Guid InterfaceType
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • 使用标准范围连接带有分隔符的字符串范围

    我想使用范围将跨度中包含的四个字节转换为字符串 这是输入和输出的示例 std span
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • 如何检查我的程序是否有数据通过管道传输到其中

    我正在编写一个应该通过标准输入读取输入的程序 所以我有以下结构 FILE fp stdin 但是 如果用户没有将任何内容通过管道传输到程序中 这就会挂起 我如何检查用户是否确实将数据通过管道传输到我的程序中 例如 gunzip c file
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • 在 C++ 中运行 python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用 C 编写的应用程序和一个测试系统 也是用 C 编写的 测试系统非常复杂并且很难改变 我只想做一些小的改变 我的班级是这样的
  • 如何使用 C# 以编程方式识别对方法的引用数量

    我最近继承了需要一些修剪和清理的 C 控制台应用程序 长话短说 该应用程序由一个包含超过 110 000 行代码的类组成 是的 单个类中有超过 110 000 行 当然 该应用程序是我们业务的核心 全天候运行更新动态网站上使用的数据 尽管我
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • 如何使用 XmlSerializer 生成标记前缀

    我想使用 XmlSerializer 生成以下内容
  • C# p/Invoke 如何使用 DirectX 游戏的 SendInput 模拟 keyPRESS 事件

    我经常为各种机器人或其他 GUI 自动化程序模拟键盘按下事件而苦苦挣扎 我已经成功地使用以下方法模拟按键事件 INPUT kInput new INPUT 1 kInput j type SendInputEventType InputKe
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • css中的对角线渐变

    我见过的大多数渐变都是垂直或水平的 是否可以使用 css 实现对角渐变 我想要一个渐变 从一个角开始变暗 在对角变亮 background moz linear gradient 45deg rgba 0 0 0 0 65 0 rgba 0
  • 画布上下文属性以防止硬件加速渲染?

    画布上下文是否有一个设置可以阻止其渲染器使用硬件加速 我想在没有它的情况下进行渲染 但不想要求用户从 Chrome 浏览器中禁用它 因为这是违反直觉的 并且不能提供无缝的工作流程体验 简短回答 No 但至少那些开发 Chromium 的人正
  • 文件大小计算、Int64以及32bit和64bit的区别

    我在使用以下代码时遇到了问题 var FileSize Int64 FileSize Info nFileSizeLow or Info nFileSizeHigh shl 32 我预计它会起作用 因为Int64作业左侧的类型 但事实并非如
  • Android 应用程序仅适用于平板电脑?

    是否可以使我的应用程序仅安装在平板电脑上 我尝试使用 minsdk 版本 但它不起作用 因为有带有 froyo 的平板电脑 现在 ICS 已经出来了 我尝试使用支持屏幕 将小 正常和大设置为 false 但 HTC Flyer 是大屏幕 不
  • 如何使用 iOS GPUImage 生成直方图?

    致力于https github com luisespinoza LEColorPicker项目中 我尝试使用项目 GPUImage https github com BradLarson GPUImage 从任意输入 UIImage 生成
  • FFMPEG 比特率计算/优化

    我为 FFMPEG 编写了以下包装 function Video input crop null scale null output null extra null input new ffmpeg movie input if is ob
  • 雅虎 API 集成?

    我必须将 yahoo api 集成到我的应用程序中 谁能为我提供相关步骤 由于我们已经集成了雅虎 我们从雅虎获得了一个令牌密钥 输入密钥后我们进入应用程序 在雅虎登录后是否有任何人可以直接进入应用程序 试试这个初学者链接 http deve
  • 如何枚举HDFS目录中的文件

    如何枚举HDFS目录中的文件 这是为了使用 Scala 枚举 Apache Spark 集群中的文件 我看到有 sc textfile 选项 但它也会读取内容 我只想读取文件名 我实际上尝试了 listStatus 但没有成功 得到下面的错
  • session_set_cookie_params() 函数的“安全”参数是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP session set cookie params 我仅使用 HTTP 不是 HTTPS 我的服务器上未配置 SSL 安全 是否意味着 cookie 将仅通过 SSL 传输 或者也可以在 HT
  • 在使用 Selenium 进行自动化测试期间检查元素时,某些网页中的元素“id”会发生变化(非静态)。遇到这种情况该如何处理呢?

    我正在尝试使用带有 chrome 驱动程序的 SELENIUM 中的测试自动化来捕获下拉菜单字段 为什么使用 Chrome 浏览器检查元素时 某些网页中的元素 id 会发生变化 如何保持 id 静态而不改变 我遵循的步骤 当我检查网页中的元
  • 将 UIImage 移动到 UIImageView 中

    我有一个UIImageView 红色方块 将显示UIImage必须缩放 我可以接收大于或小于UIImageView 缩放后 显示的部分UIImage是它的中心 我需要的是显示蓝色方块中的图像部分 我该如何存档它 我只能获取图像尺寸 高度和宽
  • 在 Select 语句中使用存储过程的结果

    我有一个存储过程 它返回一个Dataset Table 我如何在一个存储过程中使用这个存储过程的结果SELECT陈述 我需要这样的东西 SELECT T1 FROM Dummy T0 INNER JOIN EXEC dbo SPGetRes
  • 我们不能在 Oracle 中使用 [specifier] 和 like 运算符吗?

    当在 oracle 中使用 LIKE 运算符来匹配任何字符时 我不能使用 说明符 例如 找出以 s 或 r 开头的客户姓名 因此我们不能将查询编写为 select from emp where customer LIKE sr ORACLE
  • 我的自定义 php 函数有问题

    好的 我正在尝试创建一个自定义函数 该函数将为最终用户回显 iframe 内的站点 url 该脚本必须检查用户是否已经看过该站点 如果已经看过 则不再显示该站点 而是从数据库等中获取另一个站点 URL 这是我到目前为止所想到的 functi
  • 使用 JSR303 进行 Spring MVC 日期格式验证

    我使用 Spring MVC 和 JSR303 来进行输入验证 我创建的表单有几个绑定到的日期字段Date支持表单的对象内的对象 我正在使用 JSR303 进行验证Date using Future 我也在用 DateTimeFormat
  • 如何在jmeter中解码base 64格式?

    有谁知道在 JMeter 中解码 Base 64 格式字符串的解决方案 我必须解码响应 但我不想重新发明轮子 我必须自己编写代码吗 希望不是 Thanks 你的解决方案非常好 但是 您可以使用 Beanshell 后处理器并将以前的采样器响
  • 如何在 React Native 中模糊文本

    问题很简单 我有一个带有文本组件的视图 我只是想让这段文字最初变得模糊 我看到的在 React Native 中模糊某些内容的唯一解决方案是通过 react native blur 来获取图像 How can we blur a TextR
  • NHibernate IList 列表

    您好 我正在尝试返回建筑域的集合 private long id private string buildingName private IList
  • SQL Server 代理作业在作业历史记录中记录自定义消息

    是否可以在作业历史消息中记录来自 SQL Server 代理作业的自定义消息 如果不是 做这样的事情最好的方法是什么 对于 T SQL 作业步骤 您可以使用print陈述 对于 CmdExec 步骤 请使用Console Writeline
  • 调用 Socket.Receive 后,C# Socket.Connected 属性更改为 false

    int readCount byte buffer new byte 128 SocketError socketError TcpClient tcpClient tcpListener AcceptTcpClient tcpClient