2012-02-27 111 views
5

我想使用Java类HttpURLConnection连接到(本地网络)上的特定设备。我需要使用特定的网络适配器,因为将运行我的程序的计算机安装了2个网络适配器。一个适配器位于更宽的公司网络中,并且动态地分配了一个IP,而另一个适配器位于该机器的本地网络并且具有静态IP。这是我想限制我的程序的第二个本地网络。HttpURLConnection&使用特定网络适配器

使用HttpURLConnection很方便,因为它使我不必解析服务器响应等,直接获取我需要的数据,而不需要执行诸如this之类的操作。但是,因为我需要限制我的HTTP请求到特定的网络适配器,我不能100%确定我的HTTP请求只能通过所需的适配器发送。我是否正确理解HttpURLConnection的工作方式,即它依赖于操作系统选择适当的网络适配器来使用?

+2

http://stackoverflow.com/questions/1008781/is-it-possible-to-specify-which-network-interface-for-a-jvm-or-ide-to-use – 2012-02-27 18:48:49

回答

7

使用普通Java,您只能将Socket绑定到选定的NetworkInterface

如果您需要HTTP协议支持以控制要从哪个网络接口进行连接,则需要使用Apache HTTP Client

您需要提供一个ConnRoutePNames.LOCAL_ADDRESS参数,参见详细信息:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

UPDATE:

由于4.3 ConnRoutePNames已过时,请使用RequestConfig及其RequestConfig.Builder代替。

+0

非常有帮助,谢谢QWE! – Kerry 2012-02-27 19:18:31

+0

谢谢!不再Qwe了:) – 2014-02-26 04:20:40