2009-10-02 9 views
7

Necesito crear un socket que se conecte a un proceso de servidor, pero debe restringirse a usar un adaptador local especificado. El comportamiento predeterminado es usar todo lo que pueda, pero necesito asegurarme de que un socket dado solo intente (por ejemplo) la conexión LAN, si tanto wifi como LAN están disponibles.Configuración del punto final local de un socket

Estoy usando C# y .NET 2.0.

Saludos

Respuesta

0

podrían intentar utilizar la función bind()? Quizás esto sería el truco.

en MSDN he encontrado que:

(http://msdn.microsoft.com/en-us/library/ms737550(VS.85).aspx)

Observaciones

Se requiere que la función se unen en una toma de desconectados antes posteriores llamadas a la función de escucha. Es normalmente utilizado para vincular conexión-orientada (corriente) o sin conexión (datagrama) sockets. La función de enlace también se puede usar para vincular a un socket sin procesar (el socket era creado llamando a la función de socket con el parámetro de tipo establecido en SOCK_RAW). La función bind puede también ser utilizado en un zócalo sin conectar antes de las posteriores llamadas a la conectar, ConnectEx, WSAConnect, WSAConnectByList, o WSAConnectByName funciones antes de las operaciones de enviar.

Cuando se crea un socket con una llamada a la función zócalo, que existe en un (familia de direcciones) espacio de nombres, pero tiene sin nombre asignado a la misma. Utilice la función bind para establecer la asociación local del socket asignando un nombre local a un socket sin nombre.

Un nombre consta de tres partes cuando utiliza la familia de direcciones de Internet: La familia de direcciones . Una dirección de host. Un número de puerto que identifica la aplicación .

+0

bind() es el método correcto para mirar, pero el PO está pidiendo para C#. –

3

Para la referencia de otros, yo estaba teniendo un problema usando bind porque estaba usando la clase UdpClient y acceder a su cavidad interna (a través de UdpClient.Client) que lanzaría una SocketException no importa cómo intenté enlazar. Mi workaround se basa en la creación y la unión del zócalo en primer lugar, a continuación, asignándole a la instancia UdpClient:

using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) 
{ 
    var endPoint = new IPEndPoint(ip, port); 
    socket.Bind(endPoint); 
    using (var client = new UdpClient() {Client = socket}) 
    { 
     var destinationIP = IPAddress.Broadcast; 
     client.Connect(destinationIP, port); 
     client.Send(bytes, bytes.Length); 
    } 
} 
Cuestiones relacionadas