través servidor primitivas flujo elementos conexión cliente windows networking binding sockets bind

servidor - Usando una interfaz de red específica para un socket en Windows



sockets en java cliente servidor netbeans (1)

(Ok segunda vez afortunado ..)

Para su información, hay otra pregunta aquí: realice la conexión () en un adaptador de red específico en las mismas líneas ...

Según The Cable Guy

Windows XP y Windows Server® 2003 utilizan el modelo de host débil para envíos y recepciones para todas las interfaces IPv4 y el modelo de host sólido para envíos y recepciones para todas las interfaces IPv6. No puede configurar este comportamiento. La pila TCP / IP de próxima generación en Windows Vista y Windows Server 2008 admite envíos y recepciones de host fuertes para IPv4 e IPv6 de forma predeterminada en todas las interfaces, excepto la interfaz de túnel Teredo para un relé específico de host Teredo.

Entonces, para responder a su pregunta (correctamente, esta vez) en Windows XP y Windows Server 2003 IP4 no, pero para IP6 sí. Y para Windows Vista y Windows 2008 sí (excepto en ciertas circunstancias).

También desde http://www.codeguru.com/forum/showthread.php?t=487139

En Windows, una llamada a bind () afecta la selección de la tarjeta solo al tráfico entrante, no al tráfico saliente. Por lo tanto, en un cliente que se ejecuta en un sistema multi-homed (es decir, más de una tarjeta de interfaz), es la pila de red la que selecciona la tarjeta a usar, y realiza su selección basándose únicamente en la IP de destino, que a su vez se basa en la tabla de enrutamiento. Una llamada a bind () no afectará la elección de la tarjeta de ninguna manera.

Tiene algo que ver con algo llamado modelo "Sistema de extremo débil" ("E / S débil"). Vista cambió a un modelo E / S fuerte, por lo que el problema podría no surgir en Vista . Pero todas las versiones anteriores de Windows usaban el modelo E / S débil.

Con un modelo E / S débil, es la tabla de enrutamiento la que decide qué tarjeta se usa para el tráfico saliente en un sistema multitarjeta.

Vea si estos hilos ofrecen alguna idea:

"El enlace de sockets locales en un host multitarjeta en Windows XP no funciona" en http://www.codeguru.com/forum/showthread.php?t=452337

"¿Cómo conectar un puerto a una tarjeta de red específica?" en http://www.codeguru.com/forum/showthread.php?t=451117 . Este hilo menciona la función CreateIpForwardEntry (), que (creo) se puede usar para crear una entrada en la tabla de enrutamiento para que todo el tráfico IP saliente con un servidor específico se enrute a través de un adaptador específico.

"Trabajar con 2 tarjetas Ethernet" en http://www.codeguru.com/forum/showthread.php?t=448863

"Comportamiento de enlace extraño en un sistema multitarjeta" en http://www.codeguru.com/forum/showthread.php?t=452368

¡Espero que ayude!

¿Existe una forma confiable en Windows, además de cambiar la tabla de enrutamiento, para forzar a un socket recién creado a usar una interfaz de red específica? Entiendo que bind() a la dirección IP de la interfaz no garantiza esto.