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

本文关键字:动态 TCP 协议 文件 通过 | 更新日期: 2023-09-27 18:32:04

>我正在使用一个通过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协议将文件发送到使用动态端口的远程计算机

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

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

通信应执行以下操作:

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

这是被动 FTP 工作方式的简化版本。

关键是,只有两种方法可以连接到动态端口上的服务器。 第一种方法如上所述。 如果不能这样做,则客户端应用必须执行端口扫描,向范围内的每个端口发送连接尝试,并查看服务器响应哪个端口。 但是,防火墙通常被编程为注意到此类事情并关闭您(这是黑客行为)。

您是在问如何确定远程计算机选择使用的动态端口吗?没有自动方法可以做到这一点。服务器应该在两台计算机都知道的端口上工作,或者您应该找到一种方法让它们通过其他通信模式选择端口。通过连接到第三方服务器或托管客户端可以访问的 Web 服务。