Omnet 和INET无线通信与UDP
OMNeT++ and INET wireless communication with UDP
我有以下方案:3无线主机H1,p1和p2(类无线主机),其中H1主机具有自定义的UDP应用程序,而P1和P2使用UDPechoApp。
想法是H1将消息发送给其他两个,但以计划的方式,例如H1向P1发送消息并等待P1回声回回去,仅在接收P1的Echo时,它才能将消息发送到P2。
我的问题是:如何获得这种行为?我可以向P1和P2发送消息,但我不知道如何告诉H1等待P1回复,然后再传输到P2。
也是关于ARP的另一个问题。我现在正在使用Arptype = GlobalArp,但我想知道,如何避免H1发送ARP请求?我怎么能告诉H1在哪里可以找到某些主机?
由于网络层并不是真正必要的,是否可以忽略它并使用它只是将消息从应用程序层转发到MAC,然后负责查找正确的目标地址?
-
您可以通过引入简单的状态机来实现该行为。只需在UDP应用程序的类中添加一个新变量,例如:
int state; // 0 - beginning, 1 - waiting for P1 response, ...
将数据包发送到P1设置此变量后:
state = 1;
然后在
handleMessageWhenUp()
中添加其他条件,例如:void UDPBasicApp::handleMessageWhenUp(cMessage *msg) { if (!msg->isSelfMessage() && msg->getKind() == UDP_I_DATA) { if (state == 0) { // ... } else if (state == 1) { // take source address cPacket *pk = PK(msg); UDPDataIndication *ctrl = check_and_cast<UDPDataIndication *>(pk->removeControlInfo()); L3Address srcAddress = ctrl->getSrcAddr(); // check if srcAddress is equal to P1 address // if equals: // 1) send a packet to P2 // 2) set state = 2 // do nothing if srcAddress is not equal to P1 } else if (state == 2) { // ... } } }
-
globalARP
使用一个静态表,由网络中的所有主机共享。在初始化期间,每个主机将自己的地址插入此表中。因此,初始化后表包含所有地址。具有arpType = GlobalARP
的主机永远不会发送ARP请求,而不是发送此表中的输入。 -
该网络层用于UDP应用程序。
IPv4NetworkConfigurator
的实例将地址分配给需要它们的所有接口。因此,您无需为网络层做任何其他事情。
相关文章:
- 从udp接收帧对于人脸识别来说太慢
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- C++游戏中的 UDP 通信问题
- 使用 Boost 的 UDP 通信(用于 MATLAB s 函数)
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- C++ 和 Simulink 之间通过 UDP 进行通信
- 使用boost :: asio进行简单的UDP通信
- Omnet 和INET无线通信与UDP
- UDP通信中的端口和IP地址用法
- 使用 UDP 的双向通信程序无法正常工作
- boost:asio IPv4地址和UDP通信
- 正在将C++结构转换为C#以用于UDP通信
- 通过OMNeT++中的无线信道连接两个UDP模块
- 无法在无线网络上通过UDP广播进行快速传输