This ссылка содержит руководство по открытию неблокирующего сокета. Однако предложенный здесь метод не дает возможности выбрать любой случайный порт. Также все конструкторы, показанные на этом java doc page, принимают адрес в качестве аргумента. Любой способ сделать это?Разъемы Java NIO, подключайтесь к любому доступному порту?
ответ
Его немного взломанное решение, но сработало для меня. Вы можете создать обычный Socket, с аргументом порта как 0 (так что вы получите случайный доступный сокет) подключиться к нему, а затем захватить его адрес. Теперь закройте этот сокет и передайте этот адрес в качестве аргумента при создании SocketChannel. Однако будьте осторожны, это может быть проблемой в многопоточной программе, где потоки создают сокет параллельно. Рассмотрим два параллельных потока t1 и t2. Предположим, что t1 создал сокет, захватил его адрес, закрыл его, а затем переключил контекст. Теперь t2 получил один и тот же порт, прежде чем t1 смог подключиться к неблокирующему каналу, используя этот сокет. В таком случае было бы хорошо продолжать цикл до тех пор, пока не будет установлено соединение без блокировки (SocketChannel).
Если посмотреть на конструкторах для InetSocketAddress указывается, что
Допустимое значение порта составляет от 0 до 65535. Номер порта нуля позволит системе подобрать временный порт в безвыходном операция.
По существу, просто перейдите в InetSocketAddress
, используя 0 для аргумента порта, и это приведет к выбору случайного порта.
- 1. iPhone AsyncSocket всегда подключается к любому порту!
- 2. Невозможно подключиться к любому порту, отличному от 22 (ssh) AWS
- 3. Соединение отказалось подключиться к любому порту, кроме 1234
- 4. Можно ли привязать scapy к любому порту для получения пакета?
- 5. Java nio udp broadcast
- 6. Прочитайте разъемы divert в java?
- 7. Java Nio абсолютный путь к относительному пути
- 8. Java NIO vs Non NIO Performance
- 9. Java NIO library, api ...?
- 10. Разъемы Java не работают через локальную сеть?
- 11. WebDAV FileSystemProvider - Java NIO
- 12. При необходимости подключайтесь к базе данных
- 13. Java NIO с InputStream.available()
- 14. java nio Selector wakeup
- 15. Java nio. Пустая трасса
- 16. Java nio partial read
- 17. Java NIO Исключение
- 18. Java NIO Перенаправление связи
- 19. Java NIO Selector.open() IOException
- 20. Java NIO package sticking
- 21. Ошибка использования java nio
- 22. Привязка облака тегов к доступному пространству
- 23. Java-почта не удается подключиться к порту
- 24. привязка Java ServerSocket к порту Hamachi
- 25. Производительность Java NIO на Android
- 26. Подключайтесь только при необходимости
- 27. «Нуль» относится к любому типу?
- 28. Java nio: многопоточность с DirectoryStream
- 29. CastException с сокетами Java NIO
- 30. Не подключайтесь к серверу mysql при обращении к статическим страницам
Я не знаю, работает ли это с NIO, но вы можете попробовать это: https://stackoverflow.com/questions/2231467/dynamically-choosing-port-number. Просто привяжите к порту 0 и выбран произвольный свободный порт – Warrior