Сервер открывает сокет и слушает его, потом из-за ошибки закрывается программа, при перезапуске он пишет что адрес уже используется.
p.s. на моменте разработки и тестирования пока не ставлю with и try
Python
Python как закрыть упавший сокет?
Все ресурсы, включая сокеты, должны освобождаться при завершении программы, даже аварийном. Для этого можно использовать менеджер контекста (with..as) или адекватную обработку исключений (try..except..finnaly). Причем при работе с сетью возникновение исключительных ситуаций очень вероятно..
При использовании менеджера контекста гарантируется освобождение ресурса, потому как метод __exit__ вызывается всегда, даже при возникновении исключения. Например:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
__s.bind((HOST, PORT))
__s.listen()
__conn, addr = s.accept()
__with conn:
____print(f"Connected by {addr}")
____while True:
______data = conn.recv(1024)
______if not data: break
______conn.sendall(data)
Менеджеры контекста в данном случае использовать удобней. Тут подробнее:
medium.com/swlh/3-ways-to-create-context-managers-in-python-a88e3ba536f3
docs.python.org/3/library/contextlib.html
При использовании обработки исключений блок finally выполняется в любом случае, потому в нем можно гарантированно закрыть сокет. Например:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
__s.connect((TCP_IP, TCP_PORT))
__s.sendall(MESSAGE)
__data = s.recv(BUFFER_SIZE)
except socket.error:
__print('ERROR!')
finally:
__s.close()
Если у тебя уже повис открытый сокет, можно вручную закрыть через cmd, например:
netstat -ano | findstr :твой_порт
taskkill /pid айди_процесса /F
Дальше сам..
При использовании менеджера контекста гарантируется освобождение ресурса, потому как метод __exit__ вызывается всегда, даже при возникновении исключения. Например:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
__s.bind((HOST, PORT))
__s.listen()
__conn, addr = s.accept()
__with conn:
____print(f"Connected by {addr}")
____while True:
______data = conn.recv(1024)
______if not data: break
______conn.sendall(data)
Менеджеры контекста в данном случае использовать удобней. Тут подробнее:
medium.com/swlh/3-ways-to-create-context-managers-in-python-a88e3ba536f3
docs.python.org/3/library/contextlib.html
При использовании обработки исключений блок finally выполняется в любом случае, потому в нем можно гарантированно закрыть сокет. Например:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
__s.connect((TCP_IP, TCP_PORT))
__s.sendall(MESSAGE)
__data = s.recv(BUFFER_SIZE)
except socket.error:
__print('ERROR!')
finally:
__s.close()
Если у тебя уже повис открытый сокет, можно вручную закрыть через cmd, например:
netstat -ano | findstr :твой_порт
taskkill /pid айди_процесса /F
Дальше сам..
зависит от того, как выглядит падение
вообще говоря, для перебития TIME_WAIT существует SO_REUSEADDR, но не стоит умышленно использовать её в качестве синей изоленты для говнокода
ошибки нужно по возможности обрабатывать нормально и не падать, так что вот это "на моменте разработки и тестирования пока не ставлю with и try" звучит как какой-то бред
попробуй всё-таки ставить для разнообразия, может, проблема решится сама собой)
вообще говоря, для перебития TIME_WAIT существует SO_REUSEADDR, но не стоит умышленно использовать её в качестве синей изоленты для говнокода
ошибки нужно по возможности обрабатывать нормально и не падать, так что вот это "на моменте разработки и тестирования пока не ставлю with и try" звучит как какой-то бред
попробуй всё-таки ставить для разнообразия, может, проблема решится сама собой)
Здравствуй, великий разработчик очень хорошей игры, я думаю вам нужно отключить сокет через настройки или через командые строки
Похожие вопросы
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Нейронные сети на Python 3.4
- Помогите, как сделать авторизацию в программе на python?
- Что писать на Python?
- Есть ли смысл изучать python
- Подскажите ресурс\книги с примерами по высшей математике и их решений на языке Python
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Программисты, расскажите, правильный StartUp? Python
- Почему Python такой сложный?
он выводит только ошибку, а если без try except то там пишет и в какой строке и все такое