HttpURLConnection & Использование определенного сетевого адаптера - PullRequest
5 голосов
/ 27 февраля 2012

Я бы хотел использовать класс Java HttpURLConnection для подключения к определенному устройству в (локальной сети). Мне нужно использовать определенный сетевой адаптер, потому что на машине, на которой будет работать моя программа, установлено 2 сетевых адаптера. Один адаптер находится в более широкой сети компании, и ему динамически присваивается IP-адрес, а второму - локальная для компьютера сеть со статическим IP-адресом. Это вторая локальная сеть, которой я хочу ограничить свою программу.

Использование HttpURLConnection удобно, потому что оно освобождает меня от необходимости анализировать ответ сервера и т. Д. И получать необходимые данные вместо того, чтобы делать что-то вроде this . Однако, поскольку мне нужно ограничить свои HTTP-запросы конкретным сетевым адаптером, я не могу быть на 100% уверен, что мои HTTP-запросы отправляются ТОЛЬКО через нужный адаптер. Правильно ли я понимаю, как работает HttpURLConnection, т. Е. Он использует операционную систему для выбора подходящего сетевого адаптера для использования?

1 Ответ

7 голосов
/ 27 февраля 2012

С простой Java вы сможете привязать Socket только к выбранному NetworkInterface .

Если вам нужна поддержка протокола HTTP с возможностью управления тем, какая сетьДля подключения к интерфейсу вам необходимо использовать Apache HTTP Client .

Вам нужно будет указать для него параметр ConnRoutePNames.LOCAL_ADDRESS, подробности см. здесь: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html.

ОБНОВЛЕНИЕ:

Поскольку 4.3 ConnRoutePNames устарело, используйте RequestConfig и его RequestConfig.Builder вместо.

...