加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 23:59:30 所属栏目:大数据 来源:网络整理
导读:我正在构建一个通过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,n
我正在构建一个通过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 /响应数据包采取行动,我需要知道响应中发送的原始数据包。

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

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

我不是很熟悉.NET,任何人都可以评论这种方法,或者推荐一个更好的模式去寻找?我应该看的任何.Net方法?

使用Task类。
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读