Получение открытого сокета для TCP-соединения в Java - PullRequest
1 голос
/ 31 января 2011

Я разрабатываю торрент с Java, и у меня есть небольшой вопрос.Как я могу получить открытый сокет для моего процесса в Java?Мне нужно около 100 свободных сокетов в последовательности, как 10000-10100.Все, что я знаю, это то, что с помощью

socket = new Socket(ip, port);

нам нужно предоставить ip и порт.Конечно, это случай отладки, и мой ip является loopback, но я мог найти только один свободный порт, используя случайные числа в поле порта.Подскажите пожалуйста, как найти последовательность свободных портов для tcp.

Ответы [ 3 ]

1 голос
/ 31 января 2011

Вы не можете гарантировать бесплатные номера портов. Вам нужно будет сканировать порты на машине в поисках свободных портов где-нибудь между 1024 и 65535. Если вы хотите создать клиентский сокет, вам нужно будет попытаться соединиться с каждым локальным портом, который вы хотите, в последовательности, прервав и снова запустив, если вы встретить используемый порт - но, конечно, это может продолжаться, если другое приложение пытается захватить порты тоже. Для сокета сервера вы должны попытаться выполнить привязку к каждому порту по порядку.

Для клиентского сокета необходимо указать локальный порт? Если нет, просто выделите количество соединений, которые вы хотите. Что касается сокета сервера, я бы просто предположил, что мне принадлежат все порты, скажем, от 10000 до 10100. Хотя запуск сотен серверов, вероятно, не то, что вы хотите.

В любой сети на Java вместо использования пакета Java .net лучше использовать Netty , с которой гораздо проще работать.

1 голос
/ 31 января 2011

Это может пролить свет;

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

0 голосов
/ 01 февраля 2011

Зачем вам нужен диапазон номеров портов на клиенте? Вы можете получить бесплатный прослушивающий порт через новый ServerSocket (0) и опросить локальный порт.Но нет веской причины, по которой вам нужен диапазон номеров портов клиента (кроме чрезмерно восторженных правил исходящего брандмауэра, которые иногда задают netadmins, не понимая, что API для их использования нет).

...