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

5

我正在处理一个通过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个回答

2
通常,服务器应该监听一个众所周知的端口以等待连接请求。响应应包括服务器将进一步通信的端口号。然后您的应用程序连接到该端口以传输数据。
通信应该执行以下操作:
1.客户端连接到众所周知的端口上的服务器。 2.服务器响应使用动态端口号进行进一步通信。 3.客户端连接到接收到的端口号上的服务器。 4.服务器响应说明连接已建立。 5.客户端传输数据并断开连接。
这是被动FTP工作的简化版本。
重点是,只有两种方法可以连接到动态端口上的服务器。第一种方法如上所述。如果无法使用该方法,则客户端应用程序必须执行端口扫描,向范围内的每个端口发送连接尝试,并查看服务器响应的端口。然而,防火墙通常编程以注意此类事情并关闭您的连接(这是黑客行为)。

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

我需要知道动态端口正在从客户端监听什么。 - jorge morera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接