通过 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协议将文件发送到使用动态端口的远程计算机
通常,服务器应在已知端口上侦听连接请求。 响应应包括服务器将进一步通信的端口号。 然后,你的应用连接到该端口以传输数据。
通信应执行以下操作:
- 客户端连接到已知端口上的服务器。
- 服务器使用用于进一步通信的动态端口号进行响应。
- 客户端通过收到的端口号连接到服务器。
- 服务器响应说连接已建立。
- 客户端传输数据并断开连接。
这是被动 FTP 工作方式的简化版本。
关键是,只有两种方法可以连接到动态端口上的服务器。 第一种方法如上所述。 如果不能这样做,则客户端应用必须执行端口扫描,向范围内的每个端口发送连接尝试,并查看服务器响应哪个端口。 但是,防火墙通常被编程为注意到此类事情并关闭您(这是黑客行为)。
您是在问如何确定远程计算机选择使用的动态端口吗?没有自动方法可以做到这一点。服务器应该在两台计算机都知道的端口上工作,或者您应该找到一种方法让它们通过其他通信模式选择端口。通过连接到第三方服务器或托管客户端可以访问的 Web 服务。