Недавно мы обновили компьютер с 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, и не выдают никаких ошибок.