java - HttpURLConnection 和使用特定的网络适配器

标签 java network-programming httpurlconnection

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

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

最佳答案

使用纯 Java,您只能绑定(bind) Socket到选定的 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相反。

关于java - HttpURLConnection 和使用特定的网络适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470328/

相关文章:

java - 映射异常: Unable to find column with logical name

c - 这些 IP 地址来自哪里?

java - 多线程 java 应用程序中 java.net.HttpURLConnection 的不同实例

java 百分比方程

java - 如何设置来自不同类的 TextView 文本?

c - 在套接字编程中如何让服务器监听有限的客户端?

linux - 为什么 C99 提示存储大小?

java - HttpURLConnection 和 json android

java - 使用 HttpURLConnection 的 HTTP 请求不会重用 TCP 连接

java - 如何解决这个错误 : class file has wrong version 52. 0,应该是 49.0