微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 OMNeT++ 中使用 TCP 协议在客户端和服务器之间发送数据包?

如何解决如何在 OMNeT++ 中使用 TCP 协议在客户端和服务器之间发送数据包?

我正在寻找 OMNeT++ 软件中 TCP/IP 协议的初始实现。我遇到的问题是当computer1和computer2建立连接,并且computer1作为客户端想要发送一个名为volt的数据包时,OMNeT++显示信息

“没有更多的事件——模拟在事件 #52 处结束,t = 0.5。”。

感谢您指导我解决这个问题。值得注意的是,代码附在本文末尾。我们还使用了 OMNeT++ 4.4.1 版和 INET 2.5.0。

计算机 1(客户端)

#include <string.h>
#include <omnetpp.h>
#include "Tcpsocket.h"
#include "IPvXAddressResolver.h"
#include "UDPControlInfo_m.h"
#include "Alireza_m.h"
using namespace std;
class COMP1: public cSimpleModule
{
public:
    const char * connectAddress;
    int          connectPort;
    Tcpsocket    tcpsocket;
protected:


    int                      localPort,destPort;
    std::vector<IPvXAddress> destAddresses;
    virtual ~COMP1();
    virtual int numInitStages() const
    {
        return 4;
    }
    virtual void initialize(int stage);
    virtual void handleMessage(cmessage *msg);

};


Define_Module(COMP1);

void COMP1::initialize(int stage)
{

    if (stage != 3)
    {
        return;
    }



    Alireza * pk=new Alireza("volt");
    pk -> setVoltX(5);


    tcpsocket.setoutputGate(gate("tcpOut"));
    tcpsocket.readDataTransferModePar(*this);
    tcpsocket.setDataTransferMode(TCP_TRANSFER_OBJECT);
    tcpsocket.bind(IPvXAddressResolver().resolve("Computer1"),1001);
    IPvXAddress destination=IPvXAddressResolver().resolve("Computer2");
    connectPort=1002;
    tcpsocket.connect(destination,connectPort);

    scheduleAt(simTime() +0.5,pk);
}

void COMP1::handleMessage(cmessage *msg)
{
    ev << " I got a message Name=" << msg -> getName() << endl;
    EV << " client received message  \n " ;
    IPvXAddress destAddr = IPvXAddressResolver().resolve(par("destAddresses"));
    Alireza * pk=new Alireza("volt");
    pk -> setVoltX(1);
    tcpsocket.send(pk);

    }
COMP1::~COMP1()
{
}

computer2(服务器)

#include <string.h>
#include <omnetpp.h>
#include "Tcpsocket.h"
#include "UDPSocket.h"
#include "IPvXAddressResolver.h"
#include "UDPControlInfo_m.h"
#include "Alireza_m.h"
using namespace std;
class COMP2: public cSimpleModule
{
public:
    const char * connectAddress;
    int          connectPort;
    Tcpsocket    tcpsocket;
protected:

    int                      localPort,destPort;
    std::vector<IPvXAddress> destAddresses;

    virtual ~COMP2();

    virtual int numInitStages() const
    {
        return 4;
    }
    virtual void initialize(int stage);
    virtual void handleMessage(cmessage *msg);

};


Define_Module(COMP2);

void COMP2::initialize(int stage)
{

    if (stage != 3)
    {
        return;
    }

    destPort  = par("destPort");
    localPort = par("localPort");

    tcpsocket.setoutputGate(gate("tcpOut"));
    tcpsocket.setDataTransferMode(TCP_TRANSFER_OBJECT);
    tcpsocket.bind(IPvXAddressResolver().resolve("Computer2"),1002);
    tcpsocket.listen();
}

void COMP2::handleMessage(cmessage *msg)
{

    ev << " I got a message Name=" << msg -> getName() << endl;
    EV << " server received message \n" ;

}
COMP2::~COMP2()
{
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。