gpt4 book ai didi

c++ - C Socket 和 Omnet++ 之间的方法名称冲突

转载 作者:行者123 更新时间:2023-11-30 02:31:39 25 4
gpt4 key购买 nike

我想在使用 Omnet++ 完成的网络模拟中使用套接字,我遇到方法名称冲突:

  • Socket 的 send() 方法。
  • 由 Omnet++ 定义的 send() 方法,允许在模拟模块之间交换消息。

编译器只识别 Omnet++ 定义的 send() 方法。

我该如何解决?

谢谢,

编辑

为了更清楚,我将通过我的代码的拷贝:

GeoTraCIMobility.cc(CPP代码)

#include <limits>
#include <iostream>
#include <sstream>
//#include <cstring> // Needed for memset
//#include <sys/socket.h> // Needed for the socket functions
//#include <netdb.h> // Needed for the socket functions
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

#include "mobility/geoTraCI/GeoTraCIMobility.h"

Define_Module(GeoTraCIMobility);

namespace {
const double MY_INFINITY = (std::numeric_limits<double>::has_infinity ? std::numeric_limits<double>::infinity() : std::numeric_limits<double>::max());

double roadIdAsDouble(std::string road_id) {
std::istringstream iss(road_id);
double d;
if (!(iss >> d)) return MY_INFINITY;
return d;
}
}

void GeoTraCIMobility::Statistics::initialize()
{
firstRoadNumber = MY_INFINITY;
startTime = simTime();
totalTime = 0;
stopTime = 0;
minSpeed = MY_INFINITY;
maxSpeed = -MY_INFINITY;
totalDistance = 0;
totalCO2Emission = 0;
}

//OTHERS FUNCTIONS

// Function that create a socket and send data
void GeoTraCIMobility::requestingFromPyServer()
{
std::string HOST = "127.0.0.1";
int PORT = 19999;
int MAX_BUFFER = 1024;

int connectionFd, rc, index = 0, limit = MAX_BUFFER;
struct sockaddr_in servAddr, localAddr;
char buffer[MAX_BUFFER+1];


memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(PORT);
servAddr.sin_addr.s_addr = inet_addr(HOST.c_str());

// Create socket
connectionFd = socket(AF_INET, SOCK_STREAM, 0);

/* bind any port number */
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(0);

rc = bind(connectionFd,
(struct sockaddr *) &localAddr, sizeof(localAddr));

// Connect to Server
connect(connectionFd,
(struct sockaddr *)&servAddr, sizeof(servAddr));

// Send request to Server
std::string req= "ShortestPath_297162704_82660198";
sprintf( buffer, "%s", req.c_str() );

// UNRECOGNIZED SEND METHOD
send(connectionFd, buffer, strlen(buffer), 0 );
// UNRECOGNIZED SEND METHOD

close(connectionFd);

printf("Client closed.\n");
}

GeoTraCIMobility.cc 继承自 cSimpleModule 的发送方法如下:

cSimpleModule.h

/**
* Sends a message through the gate given with its ID.
*/
int send(cMessage *msg, int gateid) {return sendDelayed(msg, SIMTIME_ZERO, gateid);}

/**
* Sends a message through the gate given with its name and index
* (if multiple gate).
*/
int send(cMessage *msg, const char *gatename, int gateindex=-1) {return sendDelayed(msg, SIMTIME_ZERO, gatename, gateindex);}

/**
* Sends a message through the gate given with its pointer.
*/
int send(cMessage *msg, cGate *outputgate) {return sendDelayed(msg, SIMTIME_ZERO, outputgate);}

最佳答案

使用 ::send(...) 访问 OMNeT++ 模型中的全局函数。否则,将调用继承自 cSimpleModule 的 send() 方法。

关于c++ - C Socket 和 Omnet++ 之间的方法名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37434092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com