【问题标题】:Sending a file to a Dynamic port by a TCP Protocol通过 TCP 协议将文件发送到动态端口
【发布时间】:2012-05-04 07:43:38
【问题描述】:

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

【问题讨论】:

    标签: c# sockets c#-4.0 tcpclient tcplistener


    【解决方案1】:

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

    【讨论】:

    • 我需要知道什么动态端口正在从客户端监听
    【解决方案2】:

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

    沟通应该做到以下几点:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 2019-10-27
      • 2020-11-19
      • 2020-08-17
      • 1970-01-01
      • 2019-06-24
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多