如何解决如何在 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 举报,一经查实,本站将立刻删除。