2012-07-13 18 views
6

Tengo dos interfaces en un host solaris. Me gustaría iniciar dos conexiones TCP a un solo servidor TCP a través de ambas interfaces, como se muestra en el diagrama. ¿Hay alguna opción en Java para vincular la interfaz con el socket TCP para anular la tabla de enrutamiento local?Enlazar una interfaz en java Conexión TCP

os adjunto el diagrama de red,

network_diagram

me gustaría utilizar tanto el ancho de banda de los enlaces en serie para obtener los datos del servidor. Por lo tanto, me gustaría iniciar la conexión en ambas interfaces.

gracias,

+0

Por desgracia, no puedo capaz de unir el diagrama de la red aquí. Mi problema principal es que tengo dos enlaces serie conectados a dos enrutadores. Y los dos enrutadores están conectados por separado a mi host. Y me gustaría iniciar dos conexiones diferentes a través de dos interfaces. – Mohan

+0

Subir en otro lugar y vincularlo, sin su diagrama, es difícil dar una respuesta correcta. –

+0

Enlace a la imagen - http://uploadpic.org/v.php?img=vSckl9f6Ze – Mohan

Respuesta

7

Puede utilizar

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

Sin embargo, muchos sistemas operativos no respetan esta "pista" y va a utilizar la tabla de enrutamiento de todos modos.

+0

Ok, básicamente es como la palabra clave "registrar". Os puede vincular el socket con esta interfaz o enlazar a la interfaz predeterminada. Si se une a una interfaz diferente, entonces mi aplicación no funcionará. ¿Hay alguna abstracción disponible en SocketChannel? – Mohan

+0

Leí algo así como "SO_BINDTODEVICE" en Linux. Pero la clase socketchanneloptions en java no tiene "SO_BINDTODEVICE". – Mohan

+0

http://en.wikipedia.org/wiki/Host_model Linux suele ser débil alojado e ignorará a qué interfaz se une un zócalo. –

1

¿Quieres decir algo como esto:

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); 
+0

No. El código anterior no usa la interfaz en absoluto y siempre su socket1 y socket2 se vincularán a la interfaz predeterminada. – Mohan

+0

Lo siento, lo anterior es lo que trato de lograr ... Pero lo anterior se conectará a la interfaz predeterminada, que a su vez utilizará la tabla de enrutamiento predeterminada. Suponiendo que el enrutamiento predeterminado es a través del Router B, aunque establezco dos conexiones de socket al servidor, voy a ir a través del mismo enlace. Entonces, en cambio, si digo el socket para usar la interfaz eth1, puedo omitir el enrutamiento predeterminado y puedo usar dos enlaces separados para dos sockets. – Mohan

+1

¡En realidad, esto funciona! – Mohan

Cuestiones relacionadas