gpt4 book ai didi

c# - 正确使用 BeginReceive/EndReceive?

转载 作者:太空狗 更新时间:2023-10-29 22:37:03 25 4
gpt4 key购买 nike

要从套接字异步接收数据,.Net 支持对称的 BeginReceive/EndReceive 调用。基本上你调用BeginReceive()开始监听并确定数据到达时应调用的回调。在回调中调用 EndReceive()提取数据并结束异步读取操作。

我正在编写 C#/.Net 软件来控制一些工业设备。控制面板允许用户设置和初始化设备,一旦初始化 BeginReceive()被称为开始监听数据。在回调EndReceive()用于提取数据,但我想立即恢复收听所以我想我应该调用BeginReceive()在执行 EndReceive() 之后再次.这是正确的吗?

如果是这样,是否有我可以在代码的其他地方使用的检查或测试来了解 BeginReceive() 是否存在?已经被调用所以我不尝试调用 BeginReceive()在同一 socket 上连续两次,在 EndReceive() 之前被称为?

最佳答案

避免调用 BeginReceive() 的方式在你打电话之前再次EndReceive()是把电话拨给BeginReceive()进入你调用 EndReceive() 的完成回调.唯一的电话 BeginReceive()不应该执行的是,当然,您在 Socket 之后立即执行的那个已连接。

编辑:

明确一点:允许调用BeginReceive()在任何接收完成发生之前任意次数。但是当你这样做时,你需要确保你做了必要的内务处理,以确保你以正确的顺序处理数据(即你处理缓冲区的顺序与你通过 BeginReceive() 提交它们的顺序相同)。

所以上面的答案是关于不必做所有这些内务处理,从而使代码更简单。

如果您只对 BeginReceive() 进行后续调用在你打电话的地方EndReceive() ,让事情井井有条是微不足道的。请注意,您仍然需要正确执行此操作:确保始终以正确顺序接收缓冲区的最简单方法就是不调用 BeginReceive()。再次调用直到之后你调用了EndReceive() (但仍然采用相同的方法)。

关于c# - 正确使用 BeginReceive/EndReceive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com