java - 替换 Java 中的套接字底层 URL 连接

标签 java sockets url tunnel network-interface

我有一个 Java 应用程序,它使用 java.net.URL 打开一个位置来检索一些数据。我现在需要通过 VPN 打开连接。它运行的 Linux 机器现在可以随时打开多个隧道,我需要能够以编程方式告诉应用程序使用哪个隧道。

我相信使用 java.net.Socket 可以选择虚拟设备打开连接,但我找不到任何方法来覆盖 URL 对象来处理所有 HTTP 流量- 或者在实际打开连接之前替换底层套接字。

那么,如何将我的应用程序连接到特定的网络接口(interface)并保持使用像 java.net.URL 这样的高级对象的优势?

现在,我不确定这是否可能,但我想我会问问聪明的 stackoverflow 社区......

最佳答案

我相信您可以使用 java.net.URL 注册自定义 URLStreamHandlerFactory。每当在 URL 上调用 openConnection() 时,它都会由这个已注册的自定义工厂处理,让您可以控制套接字连接的细节。

一旦您能够操作套接字创建,指定您使用的网络接口(interface)就相当简单了:

NetworkInterface ni = NetworkInterface.getByName("eth0");
Socket socket = new Socket();
socket.bind(ni.getInetAddresses().nextElement());

看起来有一些库可以提供简单的访问来设置 HTTP 连接使用的 socketFactory。参见示例 http://faban.org/1.1/docs/api/index.html?com/sun/faban/driver/transport/sunhttp/HttpURLConnection.html

关于java - 替换 Java 中的套接字底层 URL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576029/

相关文章:

java - JPA 2 Hibernate Group BY 和 Count * 与其他列

java - 使用JAXB_FRAGMENT属性时,是否需要输出XML Declaration?

java - 从 iText7 中的表格中删除边框

Java 8 列表复制

c# - 从 IIS 5.1 FTP 服务器返回意外的字节序列

sql-server - 当参数值有 '&' 时,将参数传递给 SSRS url 问题

php - 当 URL 中包含 “” 时,为什么通过 URL 从 MySQL 获取数据不起作用?

Java MINA 暴露套接字

python - TCP 套接字文件传输

ios - 如果可用,请在 Facebook 应用程序中打开链接