- ベストアンサー
sock.sendでTCP送信したデータ列の長さ
- TCP送信するデータの長さを調査しています。
- サーバーに送信したデータの長さが期待と異なることが分かりました。
- データの長さを調整する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>print(len(test))これをやった時の結果が"1212"と表示されるので、うまくいったと思ったのですが・・・ その"1212"は1212バイトではなく、testが管理している配列の要素数が1212個ということだと思いますけど。 NumPyでバイト列を扱いたいのでしたら test=np.array([0x88,~略~,0x45], dtype=np.uint8) になるんじゃないでしょうか。 あとPythonのNumPyについては、この質問見て知った位なので詳細な使い方を聞かれても困ります。
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1626/5665)
C/C++ではなくpythonの話題な気がしますしpythonはちょっと読める程度ですけど sock.send(test) は 0x88,0x88,0x88,0x53,~ の1212バイトのバイト列を送ってるのではなくて(中のデータが[0x88,0x88,0x88,0x53,~]な)arrayオブジェクトをシリアライズしたデータを送ってるのではないでしょうか。
お礼
回答頂きありがとうございます。 print(len(test))これをやった時の結果が"1212"と表示されるので、うまくいったと思ったのですが・・・ 実際Wiresharkでキャプチャしてみると248byte分の0x00が 0x00,0x00,0x01,0x4d,0x45])この1212byte目の後ろに余計にくっついてくる感じになります。 以前、同様の動作をするTCPクライアントをGCCでやってみたことがあるのですが、 このプログラムに相当する箇所は write(sock,test, 1212); このように書いたことがあり、バイト数を明示するような書き方があったのですが、pythonではこのようなことができないのでしょうか?
補足
今回のpythonのプログラムはこちらのサイトを参考にさせていただいております。 saito's memo Pythonでネットワークプログラミング http://memo.saitodev.com/home/python_network_programing/
お礼
回答頂きありがとうございます。教えていただきました”dtype=np.uint8”これでバイト数1212byteのデータとなり、サーバーと正常に通信できるようになりました。大変助かりました。