В настоящее время я изучаю программирование сокетов на python, и я озадачен тем, как выбирать порты для прослушивания моих серверов. Я знаю, что я не могу выбрать определенный диапазон (до 3000 или что-то?), Поэтому я выбрал порты выше этого номера (точнее, 7777).Как выбрать порт в программировании сокетов?
В моем сценарии я хотел бы протестировать свою программу с использованием различного количества серверов (кратные от 12 до 96). Пока я тестирую свою программу с 12 кодами сервера, назначая хосту localhost
и номера портов от 7777
до 7788
.
Иногда, когда я запускаю свою программу, питон intepreter говорит:
Traceback (most recent call last):
File "/home/myUserName/sockettutorial/sockettest4/ppc1/dir12/nwserver12.py", line 9, in <module>
s.bind((host,port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
несмотря я убил все соответствующие процессы, которые могут по-прежнему слушать указанные порты (с использованием netstat -plan
для проверки PIDs этих процессов).
Я включил эту часть в моих кодов сервера:
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
Моя проблема в том, что, несмотря на ошибки, то программа работает, как ожидалось, а иногда, когда я запускаю свою программу, я не получил это ошибки вообще, и иногда я это делал. Тем не менее, сама по себе ошибка раздражает, и если я хочу избавиться от нее, есть ли способ разрешить машине/хосту назначать доступные порты для серверов или мне нужно их вручную назначить?
Благодарим за ответы!
Когда вы перечисляете все прослушиватели сокетов (например, через 'netstat -a | grep" LISTEN "') в вашей системе, он даже появляется в режиме под названием 'TIME_WAIT'? – HelloWorld
Я не заглянул в детали. Постараюсь сегодня наблюдать и сообщим вам. – KhunWasut