我想使用Java类HttpURLConnection连接到(本地网络)上的特定设备。我需要使用特定的网络适配器,因为将运行我的程序的机器安装了2个网络适配器。一个适配器位于更广泛的公司网络上,并动态分配IP,而第二个适配器是机器本地的网络,并具有静态IP。这是我想要将我的程序限制到的第二个本地网络。
使用HttpURLConnection很方便,因为它让我不必解析服务器响应等,直接获取我需要的数据,而不是做this之类的事情。但是因为我需要将我的HTTP请求限制到特定的网络适配器,所以我不能100%确定我的HTTP请求是通过所需的适配器发送的。我是否理解HttpURLConnection如何工作,即它依赖于操作系统选择合适的网络适配器来使用?
答案 0 :(得分:7)
使用普通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。