Я пытаюсь отправить пакет данных от клиента на сервер, используя сеанс 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.Я боролся с этой проблемой уже неделю.Может кто-нибудь помочь, пожалуйста?