我应该使用 while(true) 从 Socket 接收数据吗?

2024-03-06

请参考我之前的问题获取代码示例套接字:有时(很少)数据包在接收过程中丢失 https://stackoverflow.com/questions/9826194/sockets-sometimes-rarely-packets-are-lost-during-receiving

我需要始终从 UDP 多播套接字接收数据。这是单向通信,我只需要监听新数据并尽快处理它。

我应该使用while(true)?我不喜欢while(true)因为在我看来这会给处理器带来很多额外的工作。也许 c# 提供了其他回调技术或其他技术?


2 到 6 个套接字(评论)可能是一个有趣的地方,阻塞或异步 IO 都可以正常工作,因为您不会用线程淹没机器。每秒 2000 个数据包,听起来有足够多的数据可以让线程保持忙碌。你不需要担心while(true) from a 表现的角度来看,自从Receive方法将阻塞直到数据可用,所以它是never做一个什么都不做的热循环。然而!就我个人而言,从美观的角度来看,我同意while(true)是不必要的印迹,因此如果您使用封闭方法,也许可以考虑:

int bytesRead;
while((bytesRead = socket.Receive(buffer)) > 0) {
    // process bytesRead from buffer
}

当套接字关闭时,它将干净地退出。

You can also使用以下任一方法执行此操作BeginReceive and Socket.ReceiveAsync方法,它不使用阻塞调用,而是使用事件或回调。这些在处理大量连接时特别有用。

亲自,我倾向于做的是使用Socket.Available;如果这是正数,则有数据缓冲并准备好使用,所以一个简单的Receive可用于快速获取该数据,而无需上下文切换。如果为零,则没有数据现在可用,因此异步调用可能更合适。这平衡了上下文切换和直接调用。请注意,ReceiveAsync方法也通过返回值内置了这个ReceiveAsync(这是true如果操作未完成,稍后将调用回调 - 并且false如果操作是already完整的,并且no将调用回调)。

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

我应该使用 while(true) 从 Socket 接收数据吗? 的相关文章

  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 在c#中获取没有时间的日期

    我的表上有一列 缺勤日期时间 日期 当我想要获取包含日期的行时 它返回 0 行 这是我的 C 代码 DateTime ClassDate DateTime Parse lblDate Content ToString var Abs dbs
  • 应用程序处于中断模式。您的应用程序已进入中断状态,

    我发现自己遇到了同样的问题here https stackoverflow com questions 36204009 disable break mode page in vs2015 我在 dll 中使用 Windows 窗体 这是针
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 我在使用 ado.net 时收到错误 Argument 2 may not be pass with ref keywords

    int t 0 cmd Parameters AddWithValue Res ref t 我在第二行收到错误 参数 2 不能与 ref 关键字一起传递 您只能通过引用传递参数ref if the 范围 is a ref参数也是如此 Add
  • 您对“大规模 C++ 软件设计”的看法 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 正在阅读亚马逊评论 https rads stackoverflow com amzn click com 0201633620 and ACC
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo

随机推荐

  • 如何等待ShellExecute运行?

    我设法在 VC 中使用 ShellExecute 来启动文档 现在我希望运行一个接收一些参数的命令行工具 并在后台运行 隐藏 而不是最小化 并让它阻止我的程序流程 以便我能够等待它完成 如何更改命令行 ShellExecute NULL o
  • 如何设置xAxis标签之间的间距

    我遇到了图表显示的问题 你可以从图片中看到它 旧版本的图表有apispaceBetweenLabels设置标签之间的间距 我只找到apispaceMax and spaceMin在最新版本中 我尝试使用它们来设置标签之间的空间 但失败了 我
  • NLTK Python 中的词义消歧

    我是 NLTK Python 的新手 我正在寻找一些可以进行词义消歧的示例应用程序 我在搜索结果中有很多算法 但没有示例应用程序 我只是想传递一句话 并想通过参考wordnet库来了解每个单词的含义 谢谢 我在 PERL 中找到了类似的模块
  • 为 Node / MongoDB 应用程序播种的最佳方法是什么?

    所以 我是 MEAN 堆栈的新手 在尝试为 MongoDB 播种时遇到了困难 我正在使用 Mongoose 与数据库进行通信 并且有大量文档表明我应该能够使用填充的 JSON 文件进行播种 我尝试过的 节点 mongo 种子 https w
  • 不使用 oledb 将 Excel 工作表数据导入到 datagrid

    在我的基于 Windows 的应用程序中 C 我想导入 Excel 工作表以在 DatatGridView 中显示其数据 我不想使用 oledb any Help using Excel Microsoft Office Interop E
  • 为什么 gets() 被弃用? [复制]

    这个问题在这里已经有答案了 使用时gets 在我的代码中 编译器大喊 warning the gets function is dangerous and should not be used and warning gets is dep
  • 如何使用 php 和 shell 脚本捕获和提供 telnet?

    这就是我想使用 php 完成的任务 可能使用 excel 使用名为 proxychains 的程序远程登录到 whois 注册商 proxychains telent whois someregistrar 43 如果失败 gt 重试 1
  • xPath:获取父级和第二个兄弟级

    我有一个巨大的 XML 我需要在其中找到支付金额 它距离单元格 2 个单元格CellText amount
  • Google 为现有自动完成参考提供了 API 调用返回 NOT_FOUND 的详细信息

    我有一个问题也许有人也有同样的问题 我正在调用 google place autocomplete api 调用 然后我向用户展示结果 他可以选择地点 根据选择 我正在拨打地点详细信息并检索该地点的详细信息 我的问题是 某些情况下详细信息服
  • 对UITableView使用didSelectRowAtIndexPath或prepareForSegue方法?

    我正在使用情节提要 并且有一个 UITableView 我有一个从我的表推送到详细 VC 的 segue 设置 但我应该使用哪种方法来处理这个问题呢 我必须将几个对象传递到详细视图 但我用吗didSelectRowAtIndex or vo
  • 如何检查使用堆栈安装的软件包版本?

    在我的项目的 cabal 文件中 我有以下内容executable部分 executable ArchPkgstatsScraper hs source dirs app main is Main hs ghc options thread
  • Selenium 启动的 ChromeDriver 在后台保持运行

    I am not able to completely delete a project because the chromedriver instance is running in the background even when th
  • UWP Composition Api 是否支持颜色替换?

    我一直在尝试寻找与颜色替换相关的示例 这是一个使用 Photoshop 的示例 例如 它可以采用蓝色阴影并将其替换为红色阴影 BEFORE AFTER 使用最新版本的 Composition Api 中的 Composition Effec
  • 关于在线HTML5视频系统离线模式的解决方案

    我们有在线网站系统 具有很多功能 例如播放视频等 目的是我们想要为iPad制作具有UIWebView支持的离线模式应用程序 两种选择 使用HTML5清单实现离线模式 here http blog cubeanywhere com 2010
  • JAVA中类的引用大小

    Java中类的引用大小是多少 对于特定的 JVM 和操作系统 它是否恒定 与引用的类无关 Class A Class B Class C A a B b C c 尺寸是a b and c无论大小都相同A B and C课程 是的 所有引用都
  • 使用 ADODB 记录集在 Excel VBA 中查询非常慢的查询以获得先前值

    我在 Access 中有这个查询 它的工作速度非常快并且具有出色的性能 但是 当我想使用 ADODB REORDSET 在 Excel 中使用此查询时 通过复制记录集信息大约需要 15 分钟Range CopyFromRecordset S
  • 使用 NewSequentialID 有什么缺点吗?

    正如问题所述 使用 NewSequentialID 作为表的默认值与 NewID 相比有何缺点 明显的优点是它不会使我们的索引碎片太多 是否担心序列会被最大化 我不认为字段上的默认值真的会成为一个缺点 如果您想在插入某些记录之前控制它们的
  • 如何正确验证 AngularJS 客户端到服务器的身份

    我正在构建一个使用 RESTful API Jersey 的 AngularJS Web 应用程序 在服务器端 我使用 Java 应用程序服务器 具体为 Glassfish 4 我的设置如下 AngularJS webapp 作为单个 wa
  • Xamarin iOS 内存泄漏无处不在

    过去 8 个月我们一直在使用 Xamarin iOS 并开发了一款具有许多屏幕 功能和嵌套控件的不平凡的企业应用程序 我们已经按照 推荐 完成了自己的 MVVM 架构 跨平台 BLL 和 DAL 我们在 Android 之间共享代码 甚至我
  • 我应该使用 while(true) 从 Socket 接收数据吗?

    请参考我之前的问题获取代码示例套接字 有时 很少 数据包在接收过程中丢失 https stackoverflow com questions 9826194 sockets sometimes rarely packets are lost