истекло время подключения к сокету Python для Windows 10 - PullRequest
0 голосов
/ 09 ноября 2018

Недавно мы обновили компьютер с Windows до Windows 10 с Windows 7, выполнив полностью чистую установку ОС. Когда он работал под управлением Windows 7, мы разместили несколько простых серверов с сокетами python, чтобы другой компьютер Linux в сети мог взаимодействовать с определенными драйверами на компьютере с Windows. Эта система (привязки сокет-сервера к открытому порту и прослушивания ответа) отлично работала в течение года, предшествовавшего этому обновлению.

Когда мы обновили ОС на компьютере с Windows, те же скрипты python, которые ранее устанавливали соединение сервера SOCK_STREAM между двумя компьютерами, перестали работать. Когда его просят соединиться, соединение просто прерывается.

Кто-нибудь знает какие-либо изменения, которые могли повлиять на способность сокета слушать в Windows 10, и / или какие-либо исправления этой проблемы? Во многих раскопках нам не удалось найти никаких очевидных исправлений.

Вот базовый пример кода, запускаемого на каждом компьютере.

Windows 10:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("XX.XX.XX.XX", XXXXX))
s.listen()
while True:
    conn, addr = s.accept() 
    try:
        conn.settimeout(3)
        data = conn.recv(1024)
    except:
        break
    if not data:break
# more code follows to process the data, etc.

В Linux:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10) # this timeout can change, and it just hangs indefinitely when removed
s.connect(("XX.XX.XX.XX",XXXXX))

Доступны IP-адрес и порт, упомянутые выше как серия X, и не выдают никаких ошибок.

1 Ответ

0 голосов
/ 09 ноября 2018

Это проблема с брандмауэром (как сказал @yorodm), поэтому ошибка совершается не кодом Python, а компьютером.

Я не могу дать решение для компьютера Linux (я полагаю, что он работает правильно, с брандмауэром, разрешающим входящие соединения), но я могу для компьютера Windows 10.

Итак, вот решение:

Зайдите в Пуск и запустите Кортану. Введите «Разрешить приложение через брандмауэр Windows», затем нажмите кнопку «Ввод». Нажмите кнопку «Изменить настройки» и рядом с «python.exe» установите флажок слева, а если он еще не включен, то два справа от python.exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...