この質問はこの投稿に関連しています: int to binary python
インクリメントする必要のあるこのシーケンス番号がありますが、これで修正され、正常に機能しています。しかし、実際にはシーケンス番号が単に短いわけではないことがわかりました。次のスキームを検討してください。
12 bits 4 bits
Sequence number Fragment number
したがって、値258(\ x02 \ x01)のシーケンス番号を送信すると、実際には次のようになります。
Fragment number :2
Sequence number :16
この258を実際のシーケンス番号にし、このように分割しないようにするにはどうすればよいのでしょうか。これを実現する簡単な方法はありますstruct
か?
アップデート:
上記の質問で私が意味したのは:
私は次のようなネットワークパケットジェネレータを構築しています:
class PacketHeader(Packet):
fields = OrderedDict([
("head", "\x00"),
("headpad", "\x00"),
("headlen", "\x1a\x00" ),
("presentflag", "\x2e"),
("timestamp", "\x43\x10\x58\x16\xa1\x01\x00\x00"),
("flag", "\x03"),
("Sequencenum", "\x04\x00"),
###12 bits of this 'short' is Seq num, 4 bits left are if this is a fragment or not(if it is, its value will be =>1, and will then represent the frag number.)
])
後で、クラスを呼び出して、次のようにパケットを送信します。
send(PacketHeader(Sequencenum=257))
send(PacketHeader(Sequencenum=258))
send(PacketHeader(Sequencenum=259))
シーケンス番号(この場合は257)をショートに変換し、その16ビットショートのフラグメント番号を表す4ビットを処理する必要があります。フラグメント番号を常に0に設定したいのですが、Sequencenumを正しくインクリメントします。
前もって感謝します !