我需要找到OMNeT ++中每个节点发送的数据包大小。我是否需要自己设置它,或者是否有任何方法可以找到动态变化的数据包大小。 请告诉我查找数据包大小的过程?
答案 0 :(得分:1)
如果您在OMNeT ++中讨论cPakets
,那么只需使用相应的getter方法来获取数据包的长度。这适用于数据包具有由您或您的代码设置的实际大小的情况。
来自OMNeT 5.1版本中的cpacket.h
:
/**
* Returns the packet length (in bits).
*/
virtual int64_t getBitLength() const {return bitLength;}
/**
* Returns the packet length in bytes, that is, bitlength/8. If bitlength
* is not a multiple of 8, the result is rounded up.
*/
int64_t getByteLength() const {return (getBitLength()+7)>>3;}
因此,只需读取该值,或者将其写入临时变量并将其用于您需要的任何内容。
答案 1 :(得分:1)
我认为你想说的是,在哪里可以找到数据包的“固有”大小,例如在.msg文件中定义的大小,基于“其中包含的内容”。 / p>
如果我是对的:你做不到。而且不应该真的想要。由于OMNeT ++模拟中的所有内容都是...... 模拟,无论cPacket的实际内容是什么,bitLength属性都可以设置为任何值,而不考虑存储在中的信息量。您的自定义消息。
因此,任何数据包所具有的唯一大小是您手动设置的大小,或者使用setBitLength()方法设置的模型库。
在协议头部有一些奇怪长度的字段(如3位,然后是9位,1个标志位等)的情况下,它很有用。最好将这些字段表示为单独的成员。由于C ++没有*这些灵活大小的数据类型,因此模拟中的表示和表示的标题将具有不同的大小。
或者,如果你想作弊,并用一个数据包传输额外的信息,那么实际的比特序列就不会真正成为真实网络的一部分。
因此,您应该使用setBitLength设置适当的长度,而不关心实际存储的内容。通常。直到你的电脑内存不足。
对于你想要达到的目标,我可能完全错了。
*是的,有位字段,但是......更容易处理它们。