通过TCP协议将文件发送到动态端口

jor*_*era 5 c# sockets tcplistener tcpclient c#-4.0

我正在使用通过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;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如何通过TCP协议将文件发送到使用动态端口的远程计算机

Not*_*tMe 2

通常,服务器应该在众所周知的端口上侦听连接请求。响应应包括服务器将进一步通信的端口号。然后您的应用程序连接到该端口以传输数据。

通信应执行以下操作:

  1. 客户端通过众所周知的端口连接到服务器。
  2. 服务器使用动态端口号进行响应,以用于进一步的通信。
  3. 客户端通过接收到的端口号连接到服务器。
  4. 服务器响应表明连接已建立。
  5. 客户端传输数据并断开连接。

这是被动 FTP 工作原理的简化版本。

要点是,只有两种方法可以通过动态端口连接到服务器。上面概述了第一种方法。如果您不能这样做,那么您的客户端应用程序将必须进行端口扫描,向一定范围内的每个端口发送连接尝试,并查看服务器在哪个端口上做出响应。然而,防火墙通常被编程为注意到这种类型的事情并关闭你(这是黑客行为)。