[解決済み] python 3.6 ソケットの pickle データが切り捨てられた
2022-01-25 12:03:41
質問
私はpickleを使用していますが、私のクライアントのpickleはこのエラーでクラッシュしました:pickleのデータは切り捨てられました。
私のサーバは. numpyの配列を作成し、pickleでクライアントに送信したい。
import socket, pickle
import numpy as np
from PIL import ImageGrab
import cv2
while(True):
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 4096)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print ('Connected by', addr)
arr = np.array([[0, 1], [2, 3]])
printscreen_pil=ImageGrab.grab(bbox=(10,10,500,500))
img = np.array(printscreen_pil) ## Transform to Array
data_string = pickle.dumps(img)
conn.send(data_string)
msg_recu = conn.recv(4096)
print(msg_recu.decode())
conn.close()
私のクライアント 彼は私のnumpy配列を持っていますが、私はpickleで読み込むことができません、私はこのエラーが発生します。
import socket, pickle
import numpy as np
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
msg_a_envoyer = "hello".encode()
s.send(msg_a_envoyer)
while 1:
data = s.recv(4096)
if not data: break
data_arr = pickle.loads(data)
print (data_arr)
s.close()
解決方法は?
の問題は、pickle data のサイズが > 4096 の場合、pickle data の最初の部分しか取得できないことです(そのため
pickle data was truncated
というメッセージが表示されます)
例えばこのように、受信が完了してからデータを追記し、ピクルスにする必要があります。
data = b""
while True:
packet = s.recv(4096)
if not packet: break
data += packet
data_arr = pickle.loads(data)
print (data_arr)
s.close()
バイトオブジェクトを増やすのはあまり効率的ではなく、オブジェクトのリストにパーツを格納する方がよいでしょう。
join
とはいえ。より高速なバリアントです。
data = []
while True:
packet = s.recv(4096)
if not packet: break
data.append(packet)
data_arr = pickle.loads(b"".join(data))
print (data_arr)
s.close()
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] Python RequestsでJSONデータをPOSTする方法とは?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】Python 3.6+で辞書は順番に並びますか?
-
[解決済み】Pythonマルチプロセッシング PicklingError: <type 'function'> をピクルスにできない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac