我正在使用ns3进行模拟,我按如下方式创建数据包;
std::ostringstream msg; msg << "Hello World!" << '\0';
Ptr<Packet> packet = Create<Packet> ((uint8_t*) msg.str().c_str(), msg.str().length());
packet->Print (cout);
std::cout << std::endl;
在接收方,我使用以下代码来检索数据包有效负载;
uint8_t *buffer = new uint8_t[p->GetSize ()];
size = p->CopyData(buffer, p->GetSize ());
string s = string(buffer, buffer+p->GetSize());
cout<<"Received:"<<s<<endl;
但是,数据包有效负载是一些奇怪的字符。而且,当我在另一台计算机上使用不同的消息(不是hello world)运行相同的代码时,我可以在消息的开头和结尾看到带有奇怪字符的消息。任何建议和建议都表示赞赏。
问候。
答案 0 :(得分:1)
我在ns-3 google群组的帮助下解决了这个问题。我发布了答案,以防其他人可能需要。
在发送方,我需要设置消息长度如下;
uint16_t packetSize = msgx.str().length()+1;
Ptr<Packet> packet = Create<Packet>((uint8_t*) msgx.str().c_str(), packetSize);
我需要在消息长度上加1,否则我会跳过空字符串终止。所以这个是一个小错误。主要是;我在MAC层接收数据包时触发一个功能。要正确读取数据包内容,我应该删除MAC标头和预告片。
问候。