ns3 数据包负载打印

ns3 packet payload printing

我正在使用 ns3 进行模拟,我按如下方式创建数据包;

std::ostringstream msg; msg << "Hello World!" << '[=10=]';
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)的相同代码时,我可以在消息的开头和结尾看到带有奇怪字符的消息。任何建议和意见表示赞赏。

此致。

我在 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 headers 和尾部。

此致。