由于我在 Azure 辅助角色中实现了 TCP 侦听器,以侦听端口 21 上的传入请求。
从 Windows 命令提示符(cmd.exe)连接到 FTP 时,连接成功。
但是,当我对 600MB 这样的大文件发出 PUT 命令时,比如
ftp>> put localfile remotefile
数据传输1分钟后,连接断开,错误为“连接被主机关闭”。由于在大数据传输过程中,FTP的控制连接会空闲。
我怀疑由于 Azure 负载均衡器终止了空闲 1 分钟的连接。
您的任何输入是否是终止连接的 Azure 负载平衡器,或者 Windows 上是否有任何注册表设置,我可以增加 ftp 客户端的超时时间,或者任何会杀死空闲连接的防火墙设置。
我尝试使用以下代码将保持活动消息从 tcpclient 发送到 tcplistener,但未能成功。
int size = sizeof(UInt32);
UInt32 on = 1;
UInt32 keepAliveInterval = 10000; //Send a packet once every 10 seconds.
UInt32 retryInterval = 1000; //If no response, resend every second.
byte[] inArray = new byte[size * 3];
Array.Copy(BitConverter.GetBytes(on), 0, inArray, 0, size);
Array.Copy(BitConverter.GetBytes(keepAliveInterval), 0, inArray, size, size);
Array.Copy(BitConverter.GetBytes(retryInterval), 0, inArray, size * 2, size);
Connection.OutboundTcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, True) Connection.OutboundTcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inArray,null);