Подключение к розетке Python из браузера iOS Safari - PullRequest
0 голосов
/ 28 мая 2020

У меня есть сокет python, прослушивающий IP-адрес моего компьютера на указанном c порте. Я использую стандартную библиотеку сокетов python со следующим кодом:

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind(server_address) # Server address is a tuple (HOST, PORT) with host being 
                                   # something like 123.456.789.00 and port being 4000
listen_socket.listen()
client_connection, client_address = listen_socket.accept()
request_data = client_connection.recv(1024).decode('utf-8')
print(request_data)

Когда я использую Chrome на моем iPhone для подключения к адресу, остальная часть моего кода работает нормально и обрабатывает входящий запрос, отправляя страницу html. Когда я использую Safari, он загружается некоторое время, пока не выйдет из строя и появится сообщение «Safari не может открыть страницу, потому что не может подключиться к серверу».

Достаточно забавно, если я остаюсь на странице, перезагружаю сервер, а затем перезагружаю страницу с помощью кнопки refre sh, соединение нормально. Но попытка получить доступ к адресу через адрес url не работает. Обновление с помощью кнопки refre sh вроде работает. Почему Safari не может подключиться к моей розетке Python?

1 Ответ

0 голосов
/ 02 июня 2020

Попробуйте увеличить количество невыполненных работ в вызове listen_socket.listen ().

У меня была аналогичная проблема с сервером сокетов python 2 и macOS Safari. Safari сказал бы, что не может подключиться к серверу, но Chrome / Firefox / IE / curl все работали без ошибок. Я изменил это:

listen_socket.listen(1)

На это:

listen_socket.listen(5)

Safari затем работал без ошибок. Теперь я использую 128 вместо 5, не уверен, что по умолчанию установлено в Python 3.

Если установлено значение 1, на сервере python я бы увидел подключение Safari, но затем socket.recv ( ) никогда не вернется.

...