2012-04-23 186 views
5

我正在使用通過TCP協議接收文件的應用程序,應用程序處理該文件,然後通過相同的協議發送它,我正在接收文件時沒有問題我的問題是,當我嘗試發送的文件,因爲我需要將文件發送到另一個應用程序正在監聽動態端口的代碼,我使用發送這些文件是:通過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; 
      } 
     } 
    } 

問題是,我怎樣才能通過TCP協議將文件發送到使用動態端口的遠程機器

回答

2

通常,服務器應該監聽已知的端口用於連接請求。響應應包括服務器將進一步通信的端口號。然後,您的應用程序連接到該端口以傳輸數據。

通信應做到以下幾點:

  1. 客戶端連接到服務器衆所周知的端口上。
  2. 服務器響應動態端口號以用於進一步通信。
  3. 客戶端根據收到的端口號連接到服務器。
  4. 服務器響應說明已建立連接。
  5. 客戶端傳輸數據並斷開連接。

這是被動FTP工作原理的簡化版本。

問題是,動態端口上只有兩種連接服務器的方式。上面概述了第一種方法。如果您不能這樣做,那麼您的客戶端應用程序將不得不執行端口掃描,向連接範圍內的每個端口發送連接嘗試,並查看服務器響應哪個端口。然而,防火牆通常被編程爲注意到這種類型的事情,並關閉你(這是黑客的行爲)。

1

你問你如何確定遠程機器選擇使用的動態端口?沒有自動化的方法來做到這一點。服務器應該在兩臺機器都知道的端口上工作,或者你應該設法讓他們通過其他通信模式選擇一個端口。通過連接到第三方服務器或託管客戶端可以訪問的Web服務。

+0

我需要知道什麼動態端口正在從客戶端偵聽 – 2012-04-23 17:37:01