2014-12-15 2 views
5

Я знаю, что для TCP у нас может быть только одно приложение, прослушивающее один порт за один раз. Теперь, если у вас есть две сетевые карты, вы можете использовать одно приложение для первого IP-адреса, а второе - для второго IP-адреса, используя тот же номер порта.Проверка использования порта при наличии нескольких интерфейсов

Теперь в этом случае Если мне нужно проверить, используется ли какой-либо порт, как это сделать?

Мое намерение - это порт, который должен использоваться только одним приложением, хотя существует несколько интерфейсов. Хорошо, если я перечислил все интерфейсы и свяжусь с номером порта со всеми этими интерфейсами в цикле, или есть лучший способ сделать эту проверку.

ответ

5

Я знаю, что для TCP у нас может быть только одно приложение, прослушивающее один порт за один раз.

За исключением случаев, указанных ниже.

Теперь, если у вас было 2 сетевых карты, одно приложение может прослушивать первый IP-адрес, а второй - на втором IP-адресе, используя тот же номер порта.

Исправить.

Теперь в этом случае Если мне нужно проверить, используется ли конкретный порт, как это сделать?

См. Ниже.

Мое намерение - порт должен использоваться только для моего приложения, хотя есть несколько интерфейсов. Хорошо, если я перечислил все интерфейсы и свяжусь с номером порта со всеми этими интерфейсами в цикле, или есть лучший способ сделать эту проверку.

Просто привяжите его к 0.0.0.0:port. В Java это означает нуль InetAddress и ненулевой номер порта. Если есть приложения, прослушивающие определенные интерфейсы и тот же номер порта, вы получите BindException. И наоборот, если вы в первую очередь, это вообще не позволит каким-либо другим приложениям привязываться к этому порту.

+0

Я предполагаю, что это относится только к адресу IPv4 ... что, если есть адрес IPv6? могу ли я увидеть и любой пример – Vijay

+0

Нулевой «InetAddress» работает для IPv6, а также IPv4 в Java. Я не знаю, что заставляет вас угадывать иначе. – EJP

+0

Я только что прочитал здесь http://stackoverflow.com/a/11110685/134713 и получаю некоторые сомнения по поводу ipv6 – Vijay

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