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

使用HttpURLConnection很方便,因为它使我不必解析服务器响应等并直接获取所需的数据,而不必像this这样进行操作。但是,由于我需要将HTTP请求限制为特定的网络适配器,因此我不能100%保证仅通过所需的适配器发送HTTP请求。我对HttpURLConnection是如何工作的理解是否正确,即它依赖于操作系统来选择要使用的适当网络适配器?

最佳答案

使用纯Java,您将只能将Socket绑定(bind)到选定的NetworkInterface

如果您需要HTTP协议(protocol)支持并能够控制从哪个网络接口(interface)进行连接,则需要使用Apache HTTP Client

您需要为其提供ConnRoutePNames.LOCAL_ADDRESS参数,请参见此处的详细信息:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

更新:

由于不推荐使用4.3 ConnRoutePNames,请改用RequestConfig及其RequestConfig.Builder

10-08 13:38
查看更多