服务器A 运行着接口项目,服务器B 开启了FTP
服务器A 通过接口连接ftp后还正常。发送下载文件后。服务器B无法访问服务器A。一分钟后又恢复正常
我是使用FluentFTP操作的ftp
简单连接一切正常
var client = new FluentFTP.FtpClient(_option.host, _option.username, _option.password, _option.port);
client.AutoConnect();
return Ok();
操作上传文件
var base64byte = Convert.FromBase64String(@"");
using var client = new AsyncFtpClient(_option.host, _option.username, _option.password, _option.port);
//client.Config.DataConnectionType = FtpDataConnectionType.PASV;
//client.Config.PassiveBlockedPorts = new List<int> { 12037 }.ToArray();
//await client.AutoConnect();
await client.Connect();
//var ip = client.Config.SocketLocalIp;
var ftp = await client.UploadBytes(base64byte, "cs/imagesGoods/测试图片2023年03月23日102251.png", FtpRemoteExists.NoCheck, true);
await client.Disconnect();
return Ok(ip);
操作下载文件
using var client = new AsyncFtpClient(_option.host, _option.username, _option.password, _option.port);
await client.AutoConnect();
//client.Config.DataConnectionType = FtpDataConnectionType.PORT;
var ftp = await client.DownloadDirectory("C:\\Users\\buzhiliyi\\Desktop\\ftp", "cs/imagesGoods", FtpFolderSyncMode.Update);
await client.Disconnect();
return Ok();
在服务器B telnet 服务器A 失败,得等一分钟才能继续访问
想问问有没有什么解决办法
该回答引用GPTᴼᴾᴱᴺᴬᴵ
看起来你在服务器A上下载文件之后,在服务器B上无法访问下载的文件。这可能是因为FTP服务器使用了主动模式(active mode),在主动模式下,FTP服务器尝试将数据连接从FTP服务器发起到FTP客户端,但由于防火墙等原因,这可能会导致连接失败。
-
你可以尝试使用FTP被动模式(passive mode)来解决此问题。在FTP被动模式下,FTP服务器会将数据连接从FTP客户端发起到FTP服务器,这通常会减少连接问题。
-
对于FluentFTP,可以通过将FtpClient.DataConnectionType属性设置为FtpDataConnectionType.PASV来启用FTP被动模式,如下所示:
client.DataConnectionType = FtpDataConnectionType.PASV;
如果仍然无法解决问题,你可能需要检查服务器防火墙设置,以确保FTP服务器可以接受来自FTP客户端的数据连接。
这个问题可能是由于您的FTP服务器的超时设置导致的,您可以尝试更改FTP服务器的超时设置,