2011-12-14 3 views
1

В настоящее время я работаю над реализацией TCP-клиента/сервера в C. В этом я обнаружил, что могу указать любое случайное число в качестве номера порта для моего ПК. Правильно ли это процедура? Или есть ли стандартный номер порта для моего ПК?Как найти номер порта любого ПК?

ответ

2

Я не знаю стандарта, но я говорю, что это не так. По крайней мере, мне это не нравится.

Вы можете проверить занятые порты, проанализировав выходы программ, например netstat, и не используйте их. Вы также можете использовать метод, который пытается подключиться к одному порту, а при сбое пытается использовать другой порт. Если вам действительно не повезло, вы должны получить действительный порт во второй попытке.

Вы должны использовать порты в пределах 49152-65535. Порты ниже 49152 зарезервированы/зарегистрированы.

+0

Озбеков: Можете ли вы поддержать свое последнее требование (относительно диапазонов портов)? – Philip

+2

@Philip: любой из 'cat/etc/services', http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml или RFC6335. – DevSolar

+0

@DevSolar: Хороший ответ! Тем не менее, я думаю, что OP спрашивает, какой номер порта использовать для своего * сервера *, поскольку ОС уже заботится о назначении клиентских портов. В этом случае я бы не рекомендовал использовать 49152-65535, поскольку RFC6335 заявляет, что «порты в диапазоне динамических портов (49152-65535) специально выделены для локального и динамического использования», оба из которых запрещают их использовать для серверов , – Philip

1

Если у вас есть вопрос, можете ли вы указать номер порта, на котором ваш сервер прослушивает, , тогда вы ошибаетесь, номера портов TCP/IP ниже 1024 являются особенными в том, что обычным пользователям не разрешается запускать на них серверы , вы можете использовать не-привилегированные порты (порты> 1024). просто убедитесь, что какое-либо другое приложение еще не использует этот порт (выше 1024), используя netstat

+0

Это правильно - вы НИКОГДА не должны использовать порты <1024, если вы действительно не знаете, что делаете! –

2

В принципе, вы можете использовать любой порт (при наличии достаточных прав доступа). Но сервер и клиент должны согласиться с на порт, и он не должен использоваться другим приложением.

Следовательно, многие порты уже зарезервированы для специальных приложений. 80 для HTTP, 22 для SSH и так далее. Файл /etc/services дает более подробную информацию.

номера портов 0-1023 называются Широко известные порты, номера 1024-49151 называются Зарегистрированные порты (не все из них, но вы получите идею).

Смежные вопросы