У меня есть простая настройка сокет-сервера для отправки некоторых номеров клиенту в интрасети.Во время тестирования я останавливаю скрипт server.py
на терминале ( CTRL + C ), что позже приводит к ошибке занятого сервера в Safari при попытке доступа к той же странице.
Я видел этот вопрос о сбое сервера Но проблемы следующие:
Я не смог найти файл /etc/init.d/networking restart
.Я использую Mac, и это для Linux.Кроме того, это излишне, когда я тестирую свой сервер.По крайней мере, 10 раз в час.
Вставка опции SO_REUSEADDR
в коде помогла Address already in use
, но я считаю, что мой сервер работает, но находится в состоянии занятости.Используя ответ здесь , я отредактировал код так:
host = <my machine address>
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 8080
s.bind((host, port))
Какие изменения я делаю в своемсервер для удаления этой ошибки в Safari?
Safari не может открыть страницу «my-ip», поскольку сервер неожиданно оборвал соединение.Это иногда происходит, когда сервер занят.Подождите несколько минут, а затем повторите попытку.
Вывод lsof -i:8080
, после остановки сценария было
python3.7 11881 <user> 3u IPv4 <Device> 0t0 TCP <my machine address>?:http-alt (LISTEN)
Я сделал kill 11881
, а затем повторно запустилкод, но получил то же сообщение в Safari.
Вывод netstat -na | grep "8080"
был
tcp4 0 0 <my machine address>.8080 *.* LISTEN
во время работы скрипта и ничего, когда я KeyboardInterrupt
.
Firefox на мгновение показывает страницу, а затем показывает страницу с ошибкой
Соединение было сброшено
Chrome показывает пустую страницутолько.
Обновление: Работает в python 2.7, но не в 3.5.Разница в коде заключается в:
c.send('\n')
в 2,7 и
c.send(bytes('\n'.encode('utf-8')))
в 3,5, где
c
равно
c, (client_host, client_port) = s.accept()
Отдых все тот же.