Omnet ++ / INET: сбой приведения из cMessage к типу Mypacket - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь отправить пакет данных от клиента на сервер, используя сеанс TCP.Пакет данных, который я отправляю, имеет тип «Mypacket», который является подклассом Omnet ++ cPacket.Однако по какой-то неизвестной причине я получаю следующую ошибку при приеме:

** не может привести тип cPacket к типу Mypacket **

Вот функция отправки клиента:

void TCPAppBase::sendPacket(Mypacket *msg)
{

long numBytes = msg->getByteLength();
double value =msg->getValue();
int nodeID = msg->getNodeID;
cout<< "value sent is:\n"<<  value <<"from node :\n"<< node <<"bytes are :\n"<<bytes ;
emit(sentPkSignal, msg);
socket.send(msg);

packetsSent++;
bytesSent += numBytes;
}

Вот функция приема сервера:

void TCPSinkApp::handleMessage(cMessage *msg)
{

if (msg->getKind() == TCP_I_PEER_CLOSED) {

    msg->setName("close");
    msg->setKind(TCP_C_CLOSE);
    send(msg, "tcpOut");
}
else if (msg->getKind() == TCP_I_DATA || msg->getKind() == TCP_I_URGENT_DATA) {

   Mypacket *pk= dynamic_cast< Mypacket *>(msg);
                  if (!pk){
                      throw cRuntimeError("Message (%s)%s is not  Mypacket -- "
                                       "probably wrong client app, or 
                                        wrong setting of TCP's "
                                          "dataTransferMode parameters "
                                          "(try \"object\")",
                                  msg->getClassName(), msg->getName());}



    double value = pk->getValue();
    int node = pk->getNodeID();
    long bytes = pk->getByteLength();

    cout<< "value received is:\n"<<  value <<"from node :\n"<< node <<"bytes are :\n"<<bytes ;


   bytesRcvd += bytes;

    emit(rcvdPkSignal, pk);
    delete msg;
}

А вот определение Mypacket:

packet Mypacket{ double value ;  int nodeID ;}

Следующая ошибка времени выполнения отображается, когда я запускаюмоделирование:

** Данные сообщения (cPacket) не являются Mypacket - возможно, неправильное клиентское приложение или неправильная установка параметров TCP dataTransferMode (попробуйте "object") **.

Я не понимаю, почему полученный пакет имеет тип cPacket !!Я определенно отправляю пакет Mypacket.Я боролся с этой проблемой уже неделю.Может кто-нибудь помочь, пожалуйста?

...