gpt4 book ai didi

.net - 如何处理数据包发送/确认

转载 作者:行者123 更新时间:2023-12-03 14:25:16 27 4
gpt4 key购买 nike

我正在构建一个应用程序以通过 Xbee API 与 Xbee 模块通信。

目前我有一些工作,但它相当简单并且有很多限制。

Sub processPackets() ' this runs as its own thread
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
End Sub

然后作为一个典型的命令请求的例子
发送数据到串口
循环(超时)检查 CMDQueue 的数据包,出列并检查它是否匹配
否则超时

现在,这种方法的潜在问题非常明显。特别是,由于 Xbee 模块可以休眠,您可能需要等待相当长的时间才能收到 Ack。另外,它取决于订单等。

我想采取非阻塞的方法。在这种情况下,为了在大多数情况下对 Ack/response 数据包采取行动,我需要知道它响应的原始数据包。

我正在考虑创建几个线程。
SendPacket 将发送数据包,将发送的数据包,发送时间,超时时间加载到内存中,还包括回调函数吗? (大批?)
PacketProc 将解析数据包,检查等待响应的数据包数组并调用回调函数。它还会检查任何已超时的等待数据包并调用回调以指示超时?

最终,我正在寻找将数据包发送到多个设备(可能以任何顺序响应)并根据这些响应或超时操作的能力。

我对 .NET 不是特别熟悉,任何人都可以评论这种方法或推荐一种更好的模式来研究吗?我应该研究的任何 .Net 方法?

最佳答案

使用任务类。

Imports System.Threading
Imports System.Threading.Tasks

...
Dim buffer As StringBuilder;
Sub processPackets() ' this runs as its own thread
' Wait for packet
' put here command/loop that waits packet

buffer.Append(packet);
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
If buffer.ToString() = "REMOTELY" Then
' Put IOQueuo
buffer.Clear()
Else
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
' Put in CMDQueue
buffer.Clear()
End If
End Sub

...
' Create and execute the Task that will process the packets
Dim t = Task.Factory.StartNew(Sub() processPackets())

http://www.dotnetcurry.com/ShowArticle.aspx?ID=491

关于.net - 如何处理数据包发送/确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624237/

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