我正在与Unetpy一起使用Unetstack软件。我希望在运行导入Unetpy python库的.py文件时检索传输和接收通知。我关注了this tutorial
我可以成功连接到本地主机并打印phy.MTU等值。当我发送数据包时,我还会在命令提示符下收到回复“同意”的信息。output_of_my_script my_script
您能帮我接收Txframentf和rxframentf以及数据有效载荷吗?
我已经进行了this link中建议的错误报告中发布的更改。 请指导我如何打印rxframe和txframe的通知。 谢谢``
答案 0 :(得分:2)
您的脚本很好,直到最后一行:
print(phy << org_arl_unet_phy.TxFrameNtf())
此处您正尝试向物理代理发送TxFrameNtf
。这没有任何意义,因为在传输完成后,物理代理会向您发送此类通知。
在到达此行时,只要传输在5秒钟内完成(txntf
),您就应该已经收到timeout=5000
的通知。要打印出通知,您需要做的是:
print(txntf)
我刚刚针对3-node-network.groovy
示例进行了测试。我正在使用unetpy-1.3b5
和fjagepy-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)]
答案 1 :(得分:1)
您通过某个支持DATAGRAM服务的代理发送了数据报。可能有许多代理支持此服务(而不仅仅是物理层)。无论如何,该数据报都会在其他节点上接收,因此您不会期望在传输节点上接收到DatagramNtf
。
如果成功,RangeReq
应该产生一个RangeNtf
,但这可能会花费超过默认的接收超时1秒的时间,具体取决于节点2的距离。因此,您可能想尝试更长的接收超时时间,以查看是否收到通知。
要从rxntf
访问有效负载中的数据,可以尝试print(rxntf.data)
。