在最后一行之前,您的脚本都很好:
print(phy << org_arl_unet_phy.TxFrameNtf())
在这里,您尝试向TxFrameNtf
物理代理发送一个。这没有任何意义,因为当传输完成时,是物理代理向您发送此类通知。
txntf
当您到达这条线时,只要在 5 秒内完成传输,您就应该已经收到通知( 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)]