Когда я запускаю приведенный ниже код в Rasperi Pi Pycharm, я получаю сообщение об ошибке (Python 3.5). Но отлично работает в Windows pycharm

reply = s.recv(1024)

ip_buying_inter = pickle.loads(reply)

print('Internal Buying Price', repr(ip_buying_inter))

reply = s.recv(1024)

ip_selling_inter = pickle.loads(reply)

print('Internal Selling Price', repr(ip_selling_inter))

Сообщение об ошибке Отслеживание (последний последний вызов):

Файл "/home/pi/PycharmProjects/Mtecg/test3.py", строка 73, в

ip_selling_inter = pickle.loads(reply)

EOFError: Исчерпан ввод


person Abinraj Rajeevan    schedule 15.11.2019    source источник


Ответы (1)


Невозможно воспроизвести проблему на основе информации в вопросе. Но похоже, что pickle жалуется на то, что не получил достаточно данных для распаковки, что может быть связано с тем, что recv не возвращает полное «сообщение».

Похоже, вы предполагаете, что получите полное маринованное сообщение с одним recv. Это не обязательно так: TCP не является протоколом сообщений, а заботится только о потоке байтов. И send на стороне отправителя может потребоваться несколько recv на стороне получателя, чтобы восстановить полное сообщение.

Если один recv вернет полное сообщение, используемое в send, зависит от множества факторов: задержки соединения, MTU (который отличается между связью на локальном хосте и связью по Ethernet или WLAN), скоростью систем ... - и это может объясните, что он работает с pycharm в Windows, но не в RasPi.

person Steffen Ullrich    schedule 15.11.2019