如何在ftp服务器文件中筛选,如何确定在FTP服务器上使用RETR时文件的结尾(PASV)...

在自定义C# FTP客户端中遇到问题,当使用RETR命令通过PASV模式接收文件时,如何准确判断文件传输结束。尽管FTP服务器在发送完所有数据后应发送226命令,但在某些情况下,该命令可能在数据完全传输前到达。博主发现Filezilla客户端从150命令中获取文件大小信息,但不确定是否所有FTP服务器都遵循此行为。寻求解决方案以避免提前终止数据读取并确保完整接收文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我决定在C#中自己推出FTP套接字客户端以获得更多控制权,但主要是为了学习体验。但是我不知道在发出RETR命令后需要读取多少文件数据。我能够建立初始FTP通信连接,然后通过发出PASV命令和所有好东西来连接新端口上的第二个套接字。如何确定在FTP服务器上使用RETR时文件的结尾(PASV)

我的问题是,当我在通信端口上发出RETR命令时,FTP服务器开始通过被动端口发送文件,然后在通信端口上完成发送时发出226命令。我可以很好地接收数据,但有时在所有文件数据到达被动端口之前,226命令到达通信端口。所以,如果我在收到226命令后立即指示我的被动套接字任务停止读取,它有时会错过包含文件结尾的数据。我已经尝试在退出Socket.Receive循环之前检查Socket.Available,但通常情况下,Socket.Available将报告套接字上可用的0字节,但套接字并不意味着没有更多的数据办法。读取FTP规范似乎FTP服务器应该在完成发送所有数据后关闭数据连接,但我认为不会发生这种情况。我可以整天读取0字节的数据。我正在查看一个破损的FTP服务器,还是我在我的方法中做错了什么?

现在的一些额外的信息可能是我的问题的答案。使用连接到同一FTP服务器的Filezilla,我发现当请求文件时,FTP服务器将文件长度附加到括号中的150命令。例如,“150打开test.zip的BINARY模式数据连接(123421字节)”。这个文本是FTP标准的一部分吗?如果所有FTP服务器都使用这种相同的行为和格式,那么我可以继续阅读,直到我达到123,421字节。但是,如果这不是普通的行为,那么我就回到原点了。欣赏任何想法。

2014-03-03

forcedfx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值