2016-05-25 42 views
1

私は私が間、メソッド名の衝突取得しています、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);} 
+2

Omnet ++はC++フレームワークなので、クラスや名前空間を使用しませんか?衝突がないことを知らない限り、グローバル名前空間のシンボルを 'using'キーワードでプルしないでください。安全であることを知っているシンボルだけをプルするか、名前空間の名前が長いと思う場合は、名前空間の別名を使用してください。 –

+0

私はここであなたが言ったことを理解していませんでした!私はSocketsのsend()メソッドを呼び出す方法を探しました。名前空間でそれを囲むことによって、C言語の名前空間が存在しないことを覚えています。また、使用を避けるためにコードを囲むことはできませんこのメソッド(send()メソッドのOmnet ++)は、heritedメソッドであるため、 – HanniBaL90

+0

Omnet ++はC++フレームワークなので、Cプログラムでは使用できません。また、Omnet ++は 'omnetcpp'名前空間を使います(私が正しくドキュメントを読んでいれば)、' omnetcpp :: send'関数があればそれを使うべきです。 *** 'using namespace omnetcpp;'を実行しないでください。 'omnetcpp'名前空間からグローバル名前空間にすべてのシンボルが引き込まれるので、あなたは例えば' '送る'。 –

答えて

3

使用::send(...) OMNeT ++モデルでグローバルな機能にアクセスします。それ以外の場合は、cSimpleModuleから継承されたsend()メソッドが呼び出されます。

+0

ありがとう、それは動作します! Omnet ++ユーザーに常にコミット – HanniBaL90