2012-04-23 21 views
5

Estoy trabajando con una aplicación que recibe un archivo por un protocolo TCP, la aplicación procesa el archivo y luego lo envía por el mismo protocolo, estoy recibiendo el archivo sin problemas , mi problema es cuando trato de enviar el archivo, porque tengo que enviar el archivo a otra aplicación que está escuchando un puerto dinámico, el código que estoy utilizando para enviar estos archivos es:Enviando un archivo a un puerto dinámico por un protocolo TCP

internal void Send(byte[] buffer) 
    { 
     TcpClient _client = null; 
     try 
     { 
      _client = new TcpClient(RemoteIPaddress, Dynamic_port); 

      if (_client != null) 
      { 
       NetworkStream _clienttStream = _client.GetStream(); 
       _clienttStream.Write(buffer, 0, buffer.Length); 
       _clienttStream.Flush(); 
       _clienttStream.Close(); 
       _clienttStream = null; 
      } 
     } 
     catch 
     { 
      if (_client != null) 
      { 
       _client.Close(); 
       _client = null; 
      } 
     } 
    } 

la pregunta es decir, ¿cómo puedo enviar un archivo por protocolo TCP a una máquina remota que utiliza un puerto dinámico

Respuesta

2

Normalmente, el servidor debe escuchar en un puerto conocido para una solicitud de conexión. La respuesta debe incluir el número de puerto con el que el servidor se comunicará más adelante. Luego, su aplicación se conecta a ese puerto para transferir los datos.

la comunicación debe hacer lo siguiente:

  1. cliente se conecta al servidor en el puerto bien conocido.
  2. El servidor responde con el número de puerto dinámico que se utilizará para futuras comunicaciones.
  3. El cliente se conecta al servidor en el número de puerto recibido.
  4. El servidor responde estableciendo la conexión establecida.
  5. El cliente transmite datos y se desconecta.

Esta es una versión simplificada de cómo funciona el FTP pasivo.

El punto es que solo hay dos formas de conectarse a un servidor en un puerto dinámico. La primera manera se describe arriba. Si no puede hacerlo de esa manera, su aplicación cliente tendrá que hacer un escaneo de puertos, enviar un intento de conexión a cada puerto dentro de un rango y ver a cuál responde el servidor. Sin embargo, los firewalls generalmente están programados para detectar este tipo de cosas y cerrarlo (es un comportamiento de hacker).

1

¿Está preguntando cómo puede determinar el puerto dinámico que la máquina remota ha seleccionado para usar? No hay una manera automática de hacer esto. El servidor debería funcionar en un puerto que ambas máquinas conocen o debería encontrar la manera de seleccionar un puerto a través de algún otro modo de comunicación. Ya sea al conectarse a un servidor de terceros o al hospedar un servicio web al que el cliente puede acceder.

+0

necesito saber qué puerto dinámico está escuchando del cliente –

Cuestiones relacionadas