2012-04-23 185 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