使用 UdpBasicApp 在两个主机之间创建无线通信

问题描述 投票:0回答:1

我创建了两个应用程序,一个是 UdpBasicApp,另一个是 UdpSink。我的目的是从发送方发送到接收方,然后添加 pcap 记录以查看数据包内容。我收到此错误:

Module not found on path 'interfaceTable' defined by par 'MyNetwork.receiver.interfaceTableModule' -- in module (inet::UdpSink) MyNetwork.receiver (id=3), at t=0s, event #1

我创建了扩展 UdpBasicApp 的 MySenderApp 模块


import inet.applications.udpapp.UdpBasicApp;

module MySenderApp extends UdpBasicApp {
  
}

这是 MySenderApp moduke 的标题

#ifndef MYSENDERAPP_H_
#define MYSENDERAPP_H_



#include <omnetpp.h>
using namespace omnetpp;
class MySenderApp : public cSimpleModule {
public:
    MySenderApp();
    virtual ~MySenderApp();

protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage* msg) override;
};

#endif /* MYSENDERAPP_H_ */

这是我用来向接收者发送数据包的 C++ 代码:


#include "MySenderApp.h"
#include <omnetpp.h>
using namespace omnetpp;


Define_Module(MySenderApp);

MySenderApp::MySenderApp() {
    // Constructor
}

MySenderApp::~MySenderApp() {
    // Destructor
}

void MySenderApp::initialize() {
    // Initialization code, if needed
    // Example: schedule a self-message to send a UDP packet
    //server =getModuleByPath("MyReceiverApp");
    cMessage* msg = new cMessage("SendUDP");
    scheduleAt(simTime() + 1.0, msg);
}

void MySenderApp::handleMessage(cMessage* msg) {
    if (msg->isSelfMessage()) {
        // Create and send a UDP packet
        cPacket* packet = new cPacket("MyPacket");

        send(packet,"socketOut");
        delete msg;  // Delete the self-message
    }
}

同样,我创建了一个扩展 UdpSink 的模块 MyReceiverApp.ned

import inet.applications.udpapp.UdpSink;
import inet.networklayer.common.InterfaceTable;

module MyReceiverApp extends UdpSink {
    parameters:
        interfaceTableModule = "^";
   
}

这是 C++ 代码:

#include "MyReceiverApp.h"
#include <omnetpp.h>


using namespace omnetpp;


Define_Module(MyReceiverApp);

MyReceiverApp::MyReceiverApp() {
    // Constructor
}

MyReceiverApp::~MyReceiverApp() {
    // Destructor
}

void MyReceiverApp::initialize() {
    // Initialization code, if needed
}

void MyReceiverApp::handleMessage(cMessage* msg) {
    // Handle incoming UDP packets here
    EV << "Received UDP packet: " << msg->getName() << endl;
    delete msg;
}

我的网络ned文件如下所示:

network MyNetwork
{
    @display("bgb=341,381");
    submodules:
        sender: MySenderApp {
            @display("p=85,76");
            @networkNode;
        }

        
        receiver: MyReceiverApp {
            @display("p=290,178");
            @networkNode;
        }

    connections allowunconnected:
        sender.socketOut --> receiver.socketIn;
        receiver.socketOut --> sender.socketIn;

       
}

我的 omnetpp.ini 文件是:

[General]
network = MyNetwork
debug-on-errors = true

sim-time-limit = 5s
record-eventlog = true

我认为错误与接口表有关,但我不知道如何解决它。

omnet++
1个回答
0
投票

A

UDPApp
不能用作主机。您必须使用
StandardHost
WirelessHost
并将 UDP 应用程序添加到这些主机的实例中。
查看无线教程,尤其是
/inet4.4/tutorials/wireless/WirelessA.ned
[Config Wireless01]
中的
/inet4.4/tutorials/wireless/omnetpp.ini
部分。

简而言之,您应该:

  1. 为您的 UDP 应用程序创建简单的模块(例如称为

    MyUDPApp
    )(查看示例
    /inet4.4/src/inet/applications/udpapp
    )。

  2. 使用

    WirelessHost
    创建您的网络。

  3. 添加您想要的主机申请,至少写下

    omnetpp.ini

    **.host1.numUdpApps = 1
    **.host1.udpApp[*].typename = "MyUDPApp"
    # other parameters of the application
    
© www.soinside.com 2019 - 2024. All rights reserved.