前提・実現したいこと
Pythonのソケット通信でファイルを送受信するソフトを作っています。
ファイルはpickleでバイナリデータにして送っています。
発生している問題・エラーメッセージ
同じファイル(バイナリデータ)なのに送受信が成功するときと失敗するときがあります
エラーメッセージは
pickle data was truncated
これになります。
送信側でのpickleデータをlenで数えたものと、受信側で最終的に受信できたデータの要素数を見ると
時々何故か途中までしか送信?受信?ができておらず、データが全然足りなくなってしまいます
この問題は、3回に一度ぐらいの確率でおき、コードを何も変えていないのにソフトを再起動すると治ることが多いです。
同じコード、同じデータでテストしているのに、なぜできるときとできないときがあるのかが本当に謎です
考えうる原因(例:Socketは不安定、そもそもそういう書き方は違うなど)があれば何でもいいので教えていただきたいです。
該当のソースコード
全文は長いので、受信側の受信部分のコードになります
Python
1rdata = sock.recv(4) 2datasize, = struct.unpack("l",rdata) 3rv = sock.recv(datasize) 4rv = pickle.loads(rv)
送信側は1、メインの送るバイナリデータ 2,1をlenで要素数を格納したデータ。の2つを送っています
1はpickleでバイナリ化したもので受信側のrvに入っていて、2はstructでpackしたデータになります
補足情報(FW/ツールのバージョンなど)
windows 10
VisualStudio Code
テストしたファイルタイプ txt pdf mp3 mp4
テストしたファイルサイズ 40バイトのものから~4MBぐらいのものまで、どれも成功するときとしないときがあります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/29 07:43
2021/11/29 10:53
2021/11/30 07:32