由于我在Azure辅助工具角色中实现TCP侦听器,侦听端口21上的传入请求。
从Windows命令提示符(cmd.exe)连接到FTP时,连接成功。
但是当我在像600MB这样的大文件上发出PUT命令时,比如
ftp>> put localfile remotefile
正好在数据传输1分钟后,连接断开,错误为 “连接由主机关闭”。由于在大数据传输期间,FTP的控制连接将处于空闲状态。
我怀疑,因为Azure负载均衡器终止了空闲1分钟的连接。
任何你的输入是否是Azure负载均衡器,它终止连接或在Windows上有任何注册表设置,我可以增加ftp客户端的超时或任何杀死空闲连接的防火墙设置。
我尝试使用代码将来自tcpclient的keep alive消息发送到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);