sock.sendでTCP送信したデータ列の長さ
現在、あるクライアント型のTCP端末でサーバーに対して送信するデータをwiresharkでキャプチャし、全く同じデータをraspberry pi3のpythonで送信できないかと思い、次のようなプログラムを作成しました。
testという配列に1212バイト分のデータを作成( print(len(test)))で1212byteを確認)し、sock.send(test)で送信したのですが、サーバーのアプリケーションにデータの受信を確認したという表示が出てこないため、ラズパイから送信されたTCPのパケットをwiresharkで確認したところ
1212byteで作成したはずのデータの長さが実際には1448byteとなっていることが分かりました。
パケット全体の大きさは通常の端末では1266byteのところ、ラズパイでは1514byteとなっていました。
1514 - 1266 = 248byte分は調べたところ配列testの
0x4d,0x45])
この後ろに0x00,0x00......が続いているようです。
このデータの長さを1212byteに変更することは可能かどうか教えていただきますよう、よろしくお願い致します。
(pythonのコード内容)
from __future__ import print_function
import socket
import time
import numpy as np
from contextlib import closing
def main():
host = '192.168.1.158'
#host = '192.168.1.52'
port = 5000
bufsize = 4096
loop= 0
testStr = "Hello world"
test=np.array([0x88,0x88,0x88,0x53,0x00,0x01,0x00,0x00,0x88,
0x88,0x88,0x00,0x0c,0x04,0x13,0x89,0x01,
0x01,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
---------------------(中略)------------------------------------------------------------------
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x4d,0x45])
print(len(test))
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with closing(sock):
sock.connect((host, port))
while 1:
sock.send(test)
#sock.send(b'20160001 Hello world'+ str(loop) + "\n")
#sock.send(testStr)
#sock.send(b'Hello world\n')
time.sleep(10.0)
loop += 1
#print(sock.recv(bufsize))
#return
if __name__ == '__main__':
main()
お礼
早速ご説明を頂き有難うございます。 ご説明して頂いたものと資料等を見て理解したいと思いますので、ベストアンサーは暫く猶予を頂けましたら幸いです。 先ずは急ぎお礼を致します。