2012-02-27 9 views
5

Chciałbym użyć klasy Java HttpURLConnection, aby połączyć się z konkretnym urządzeniem w (sieci lokalnej). Potrzebuję konkretnej karty sieciowej, ponieważ na komputerze, na którym uruchomiony będzie mój program, zainstalowano 2 karty sieciowe. Jedna karta znajduje się w szerszej sieci firmowej i jest dynamicznie przypisywana do adresu IP, podczas gdy druga jest siecią lokalną dla urządzenia i ma statyczny adres IP. To jest ta druga lokalna sieć, do której chcę ograniczyć mój program.HttpURLConnection i używanie konkretnej karty sieciowej

Korzystanie z funkcji HttpURLConnection jest wygodne, ponieważ zwalnia mnie konieczność analizowania odpowiedzi serwera itp. I uzyskiwania prostych danych, których potrzebuję, zamiast robić coś w rodzaju this. Jednak ponieważ muszę ograniczyć moje żądania HTTP do konkretnej karty sieciowej, nie mogę być w 100% pewien, że moje żądania HTTP są wysyłane TYLKO przez żądany adapter. Czy mam rację, jeśli chodzi o moją wiedzę na temat działania funkcji HttpURLConnection, tzn. Czy korzysta ona z systemu operacyjnego do wyboru odpowiedniej karty sieciowej?

+2

http://stackoverflow.com/questions/1008781/is-it-possible-to-specify-which-network-interface-for-a-vm-or-ide-ide-use –

Odpowiedz

7

W zwykłej Javie będzie można powiązać tylko Socket z wybranym NetworkInterface.

Jeśli potrzebujesz obsługi protokołu HTTP z możliwością kontrolowania, z którym interfejsem sieciowym chcesz się połączyć, musisz użyć Apache HTTP Client.

Należy podać parametr ConnRoutePNames.LOCAL_ADDRESS, zobacz szczegóły tutaj: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html.

UPDATE:

Od 4,3 ConnRoutePNames jest przestarzała, użyj RequestConfig i jego RequestConfig.Builder zamiast.

+0

Bardzo pomocna, dziękuję Qwe! – Kerry

+0

Dzięki! Nie Qwe więcej :) –

Powiązane problemy