私は私が間、メソッド名の衝突取得しています、Omnet ++で行われ、私のネットワークシミュレーション内部のソケットを使用したい:ソケットの衝突++
- send()メソッドを。
- Omnet ++で定義されたsend()メソッドで、 がシミュレーションモジュール間でmsgを交換できるようにします。
コンパイラは、Omnet ++で定義されたsend()メソッドのみを認識します。
どうすれば解決できますか?
それをより明確にするためには、
EDIT
をありがとう、私は私のコードのコピー過去ます:
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);}
Omnet ++はC++フレームワークなので、クラスや名前空間を使用しませんか?衝突がないことを知らない限り、グローバル名前空間のシンボルを 'using'キーワードでプルしないでください。安全であることを知っているシンボルだけをプルするか、名前空間の名前が長いと思う場合は、名前空間の別名を使用してください。 –
私はここであなたが言ったことを理解していませんでした!私はSocketsのsend()メソッドを呼び出す方法を探しました。名前空間でそれを囲むことによって、C言語の名前空間が存在しないことを覚えています。また、使用を避けるためにコードを囲むことはできませんこのメソッド(send()メソッドのOmnet ++)は、heritedメソッドであるため、 – HanniBaL90
Omnet ++はC++フレームワークなので、Cプログラムでは使用できません。また、Omnet ++は 'omnetcpp'名前空間を使います(私が正しくドキュメントを読んでいれば)、' omnetcpp :: send'関数があればそれを使うべきです。 *** 'using namespace omnetcpp;'を実行しないでください。 'omnetcpp'名前空間からグローバル名前空間にすべてのシンボルが引き込まれるので、あなたは例えば' '送る'。 –