2012-04-23 20 views
5

Sto lavorando con un'applicazione che riceve un file da un protocollo TCP, l'applicazione elabora il file e quindi lo invia dallo stesso protocollo, sto ricevendo il file senza problemi , il mio problema è quando si tenta di inviare il file, perché ho bisogno di inviare il file a un'altra applicazione che è in ascolto una porta dinamica, il codice che sto usando per inviare questi file è:Invio di un file a una porta dinamica tramite un protocollo 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 domanda è, come posso inviare un file tramite protocollo TCP a un computer remoto che utilizza una porta dinamica

risposta

2

In genere, il server deve ascoltare su una porta ben nota per una richiesta di connessione. La risposta dovrebbe includere il numero di porta che il server comunicherà ulteriormente. Quindi la tua app si connette a quella porta per il trasferimento dei dati.

La comunicazione dovrebbe effettuare le seguenti operazioni:

  1. client si connette al server sulla porta ben nota.
  2. Il server risponde con il numero di porta dinamico da utilizzare per ulteriori comunicazioni.
  3. Il client si collega al server sul numero di porta ricevuto.
  4. Il server risponde affermando la connessione stabilita.
  5. Il client trasmette dati e disconnette.

Questa è una versione semplificata di come funziona l'FTP passivo.

Il punto è, ci sono solo due modi per connettersi a un server su una porta dinamica. Il primo modo è delineato sopra. Se non è possibile farlo in questo modo, l'app client dovrà eseguire una scansione delle porte, inviare un tentativo di connessione a ciascuna porta all'interno di un intervallo e vedere su quale server risponde. Tuttavia, i firewall sono generalmente programmati per rilevare questo tipo di cose e bloccarti (è il comportamento degli hacker).

1

Stai chiedendo come è possibile determinare la porta dinamica che la macchina remota ha selezionato da utilizzare? Non esiste un modo automatico per farlo. Il server dovrebbe funzionare su una porta di cui entrambe le macchine sono a conoscenza o si dovrebbe trovare un modo per loro di selezionare una porta attraverso un'altra modalità di comunicazione. Collegandoti a un server di terze parti o ospitando un servizio Web a cui il cliente può accedere.

+0

Ho bisogno di sapere cosa sta ascoltando la porta dinamica dal client –