在java TCP连接中绑定接口

在java TCP连接中绑定接口,java,networking,tcp,network-programming,Java,Networking,Tcp,Network Programming,我在solaris主机中有两个接口。我想通过两个接口启动到单个TCP服务器的两个TCP连接,如图所示。Java中是否有将接口绑定到TCP套接字以覆盖本地路由表的选项 我附上网络图 我想使用这两个串行链路带宽从服务器获取数据。因此,我想在两个接口上启动连接 谢谢,您可以使用 Socket s = new Socket(hostname, port, localInterface, 0); 但是,许多操作系统不遵守此“提示”,并且无论如何都会使用路由表。您的意思是这样的: Socket sock

我在solaris主机中有两个接口。我想通过两个接口启动到单个TCP服务器的两个TCP连接,如图所示。Java中是否有将接口绑定到TCP套接字以覆盖本地路由表的选项

我附上网络图

我想使用这两个串行链路带宽从服务器获取数据。因此,我想在两个接口上启动连接

谢谢,

您可以使用

Socket s = new Socket(hostname, port, localInterface, 0);

但是,许多操作系统不遵守此“提示”,并且无论如何都会使用路由表。

您的意思是这样的:

Socket socket1 = new Socket();
socket1.bind(new InetSocketAddress("10.1.1.1", port));
socket1.connect(new InetSocketAddress("10.1.3.1", port));

Socket socket2 = new Socket();
socket2.bind(new InetSocketAddress("10.1.2.1", port));
socket2.connect(new InetSocketAddress("10.1.3.1", port);

不幸的是,我无法在此附加网络图。我的主要问题是,我有两个串行链接连接到两个路由器。这两个路由器分别连接到我的主机。我想通过两个接口启动两个不同的连接。将其上传到其他地方并链接,如果没有图表,这很难给出正确的答案。链接到图片-好的,基本上就像“注册”关键字。Os可以自由地将套接字绑定到此接口或绑定到默认接口。如果它绑定到不同的接口,那么我的应用程序将无法工作。SocketCannel中有任何抽象吗?我在linux中读到了类似“SO_BINDTODEVICE”的东西。但是java中的socketchanneloptions类没有“SO_BINDTODEVICE”。Linux通常是弱托管的,将忽略将套接字绑定到哪个接口。谢谢,这很有用。solaris怎么样?谢谢!接受这个。我将检查是否可以配置操作系统以尊重该选项,并会让您知道。否。上面的代码根本不使用该接口,并且您的socket1和socket2将始终绑定到默认接口。抱歉,我正试图实现上述功能。。但是上面的将连接到默认接口,inturn将使用默认路由表。假设默认路由是通过路由器B,尽管我建立了到服务器的两个套接字连接,但我将通过相同的链接。因此,如果我说套接字使用接口eth1,我可以绕过默认路由,并且可以为两个套接字使用两个单独的链接。