3

我正在使用 Unetstack 软件和 Unetpy。我希望在运行导入 Unetpy python 库的 .py 文件时检索传输和接收通知。我跟着这个教程

我能够成功连接到本地主机并打印 phy.MTU 等值。当我传输一个数据包时,我还会在命令提示符下收到一条回复说 AGREE。output_of_my_script my_script在此处输入图像描述

在此处输入图像描述 您能否帮助我接收 Txframentf 和 rxframentf 以及数据有效负载。

我什至在此链接中建议的错误报告中进行了更改。请指导我如何打印 rxframe 和 txframe 的通知。谢谢你``

4

2 回答 2

4

在最后一行之前,您的脚本都很好:

print(phy << org_arl_unet_phy.TxFrameNtf())

在这里,您尝试向TxFrameNtf物理代理发送一个。这没有任何意义,因为当传输完成时,是物理代理向您发送此类通知。

txntf当您到达这条线时,只要在 5 秒内完成传输,您就应该已经收到通知( timeout=5000)。要打印通知,您需要做的就是:

print(txntf)

我刚刚对3-node-network.groovy样本进行了测试。我正在使用unetpy-1.3b5fjagepy-1.4.2b3。这是修改后的代码:

from unetpy import *
modem = UnetGateway('localhost', 1102)
phy = modem.agentForService(Services.PHYSICAL)
print(phy.MTU)
print(phy.basebandRate)
print(phy << org_arl_unet_phy.TxFrameReq(to=3, data=[1,2,3,4]))
txntf = modem.receive(timeout=5000)
print(txntf)

和输出:

16
4096
AGREE
TxFrameNtf:INFORM[type:1]

您可以看到TxFrameNtf已正确接收。

对于接收,您需要订阅代理的通知,然后接收一个帧:

modem.subscribe(phy)
rxntf = modem.receive(org_arl_unet_phy.RxFrameNtf, timeout=5000)
print(rxntf)

假设您在指定的 5 秒超时内收到一个帧(在本例中,在节点 3 上),这应该打印出如下内容:

RxFrameNtf:INFORM[type:CONTROL from:1 to:3 protocol:0 rxTime:34587658 (4 bytes)]
于 2018-06-24T06:20:55.477 回答
1

您通过某个支持 DATAGRAM 服务的代理发送了数据报。可能有许多代理支持此服务(不仅仅是物理层)。无论如何,该数据报将在不同的节点上接收,因此您不会期望DatagramNtf在传输节点上接收。

如果成功,RangeReq应该会产生一个RangeNtf,但这可能需要超过 1 秒的默认接收超时时间,具体取决于节点 2 的距离。因此,您可能想尝试更长的接收超时时间以查看是否收到通知。

要从有效载荷中访问数据rxntf,您可以尝试print(rxntf.data)

于 2018-06-30T16:42:58.937 回答