Я пытаюсь получить данные из ПЛК (AutomationDirect P2000).Я настроил ПЛК в качестве сервера с их программным обеспечением (я также могу подключиться к нему с помощью их программного обеспечения через Ethernet и использовать Wireshark, чтобы убедиться, что он фактически отправляет пакеты UDP на мою машину примерно каждые 200 мс).Я пытаюсь настроить очень простой скрипт Python для извлечения указанных данных, не потрудившись кодировать их или что-то с ними сделать, но моя программа зависает в socket.recv ().Всякий раз, когда я пытаюсь запустить его, «Got here» будет напечатано, но «Now here» не будет.Из того, что я прочитал, тот факт, что он зависает, означает, что данные не принимаются, но из моего (ограниченного) понимания того, что я вижу на Wireshark, это не так.Я довольно новичок во всем этом и был бы признателен за любую помощь.
Я попытался использовать socket.recvfrom (), который дает тот же результат.Я также попытался использовать socket.bind () вместо socket.connect (), но получаю исключение «Запрошенный адрес недопустим в его контексте».Кроме того, я попытался поиграться с различными IP-адресами и портами.Например, я попытался использовать IP = '' вместо фактического IP, и я попытался использовать информацию об источнике / месте назначения из Wireshark как то, что я пытаюсь связать или подключиться, но пока ничего не помогло.
import socket
IP = '192.168.3.1'
PORT = 9999
BUFFER_SIZE = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((IP, PORT))
while True:
print("Got here")
data = s.recv(BUFFER_SIZE)
print("Now here")
print(f"Received {data}")
Я ожидаю получить распечатку пакета в байтовом формате, но вместо этого программа зависает.Если я пытаюсь использовать socket.bind () вместо socket.connect (), я получаю сообщение об ошибке «... строка 8, в s.bind ((IP, PORT))
OSError: [WinError 10049] Запрошенный адрес недопустим в своем контексте "