提问者:小点点

ns3数据包有效载荷打印


我正在使用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)在我的另一台计算机上运行相同的代码时,我可以看到消息的开头和结尾都有奇怪的字符。欢迎提出任何建议和意见。

问候。


共1个答案

匿名用户

我在ns-3谷歌小组的帮助下解决了这个问题。我把答案贴出来,以防万一别人可能需要。

在发件人端,我需要设置消息长度,如下所示;

 uint16_t packetSize = msgx.str().length()+1;
 Ptr<Packet> packet = Create<Packet>((uint8_t*) msgx.str().c_str(), packetSize);

我需要将1添加到消息长度,否则我将跳过空字符串终止。所以这个是个小虫子。主要的是;我在MAC层收到数据包时触发一个函数。要正确读取数据包内容,我应该删除MAC报头和报尾。

问候。