2012-04-23 3 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の動作方法を簡略化したものです。

ポイントは、ダイナミックポート上のサーバーに接続する方法が2つしかないことです。最初の方法は上に概説されています。そうすることができない場合、クライアントアプリケーションはポートスキャンを実行し、範囲内のすべてのポートに接続試行を送信し、サーバーが応答するポートを確認する必要があります。しかし、ファイアウォールは一般的に、この種のものに気づき、あなたを止めるようにプログラムされています(ハッカーの行動です)。

1

リモートマシンが使用するように選択したダイナミックポートを確認する方法を尋ねていますか?これを行うための自動化された方法はありません。サーバーは、両方のマシンが認識しているポートで動作するか、他の通信モードでポートを選択する方法を検討する必要があります。サードパーティのサーバーに接続するか、またはクライアントがアクセスできるWebサービスをホストする。

+0

ダイナミックポートがクライアントから受信していることを知る必要があります –

関連する問題