• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sock.sendでTCP送信したデータ列の長さ)

sock.sendでTCP送信したデータ列の長さ

このQ&Aのポイント
  • TCP送信するデータの長さを調査しています。
  • サーバーに送信したデータの長さが期待と異なることが分かりました。
  • データの長さを調整する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>print(len(test))これをやった時の結果が"1212"と表示されるので、うまくいったと思ったのですが・・・ その"1212"は1212バイトではなく、testが管理している配列の要素数が1212個ということだと思いますけど。 NumPyでバイト列を扱いたいのでしたら test=np.array([0x88,~略~,0x45], dtype=np.uint8) になるんじゃないでしょうか。 あとPythonのNumPyについては、この質問見て知った位なので詳細な使い方を聞かれても困ります。

techhouse
質問者

お礼

回答頂きありがとうございます。教えていただきました”dtype=np.uint8”これでバイト数1212byteのデータとなり、サーバーと正常に通信できるようになりました。大変助かりました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

C/C++ではなくpythonの話題な気がしますしpythonはちょっと読める程度ですけど sock.send(test) は 0x88,0x88,0x88,0x53,~ の1212バイトのバイト列を送ってるのではなくて(中のデータが[0x88,0x88,0x88,0x53,~]な)arrayオブジェクトをシリアライズしたデータを送ってるのではないでしょうか。

techhouse
質問者

お礼

回答頂きありがとうございます。 print(len(test))これをやった時の結果が"1212"と表示されるので、うまくいったと思ったのですが・・・ 実際Wiresharkでキャプチャしてみると248byte分の0x00が 0x00,0x00,0x01,0x4d,0x45])この1212byte目の後ろに余計にくっついてくる感じになります。 以前、同様の動作をするTCPクライアントをGCCでやってみたことがあるのですが、 このプログラムに相当する箇所は write(sock,test, 1212); このように書いたことがあり、バイト数を明示するような書き方があったのですが、pythonではこのようなことができないのでしょうか?

techhouse
質問者

補足

今回のpythonのプログラムはこちらのサイトを参考にさせていただいております。 saito's memo  Pythonでネットワークプログラミング http://memo.saitodev.com/home/python_network_programing/