用socket编写ftp客户端的主要思路是什么?

adeadsea 2013-02-19 05:39:06
又:有什么要注意的地方?
...全文
448 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-03-04
  • 打赏
  • 举报
回复
发送完下载文件的命令后难道不需要新建文件来保存下载的文件? 一次就能全部读完发的数据?难道不需要循环读发过来的数据?
adeadsea 2013-03-02
  • 打赏
  • 举报
回复
感谢楼上各位的回复,我看了一个例子,以下是发送完下载文件的命令后的代码,但我看不太懂,为什么要创建一个新文件,循环又有什么用? /* 客户端创建文件 */ file_handle = open(disk_name, CRFLAGS, RWXALL); for( ; ; ) { ... ... /* 客户端通过数据连接 从服务器接收文件内容 */ read(data_sock, read_buf, read_len); /* 客户端写文件 */ write(file_handle, read_buf, read_len); ... ... }
xunilcyl 2013-02-28
  • 打赏
  • 举报
回复
@Self_Chou 如果是用FTP协议来传输的话,用二进制方式传输。不管什么类型的文件,都是由二进制数据组成的,所以只要把文件中的每一位都传输完,这个文件就传输完成了。断点续传的话,就是client发送命令REST recvLength命令(recvLength是client已经接收的字节数)告诉server,让server传送recvLength之后的数据过来。
zhouxf_cn 2013-02-27
  • 打赏
  • 举报
回复
借贵宝地一用,Linux下怎么传输压缩文件,还有怎么实现断点续传
xunilcyl 2013-02-27
  • 打赏
  • 举报
回复
回复4楼, 如果你仅仅是编写一个FTP客户端,是没必要看vsftpd的源码的。看了对你编写ftp客户端其实也没那么大的用处,除非你想自己编写一个ftp服务器。其实只要你的客户端符合RFC959,就可以和包括vsftpd在内的所有符合标准的ftp服务器交互。 另外给个建议,进行开发的时候最好开着一个抓包软件,这样你可以检查你编写的客户端发出去的信息是不是和你预料中的一样,便于调试。以前我测试的时候就是和ftp://kernel.org(貌似也是vsftpd服务器)进行通信的,非常方便。
帅得不敢出门 2013-02-22
  • 打赏
  • 举报
回复
可以直接利用curl库编写ftp程序
七擒关羽 2013-02-22
  • 打赏
  • 举报
回复
补充下好了: 1、FTP包含2条socket连接,一条用于命令传输,一条用于数据传输 2、查看下 命令控制用法,个别服务端不是全部支持,比如断点续传命令 3、大部分系统都自动裸FTP操作,可以自己敲命令实现一些基本功能,可以加深理解 4、对源码查看可以,但需要自己学会调式源码
adeadsea 2013-02-22
  • 打赏
  • 举报
回复
ls,感谢回复。 我说具体点,我要编的是与vsftpd通信的客户端,网上客户端编写例子基本看懂了,但vsftpd源码却太复杂了,有必要看吗?怎么看?
xunilcyl 2013-02-20
  • 打赏
  • 举报
回复
你不把自己的想法贴出来。也没办法针对性的给建议啊! 用winsock编写的话,首先肯定要学基本的winsock的几个基本函数WSAStartup(),sock(),connect(),send(),recv()这些的用法。然后就看RFC959。对FTP协议有个大概的概念。接下来就是编写一个简单的程序,比如向某个FTP服务器发送一个字符串,然后接收响应并打印出来。 FTP交互过程一般如下: 1. client调用connect(),与server三次握手建立TCP连接。 2. server给client发送欢迎信息。 3. client调用recv()获得欢迎信息,显示。 4. client调用send()发送命令,一般的格式给"COMMAND content\r\n"。其中COMMAND就是FTP命令了,如"USER user\r\n","PASS 123456\r\n"等。每条命令肯定是以\r\n结尾。 5. server调用recv()接收命令,解析命令,执行命令。然后调用send()发送执行的结果。执行的结果一般是应答码加上对应的描述。例如,如果登录成功的话可能发送“230 login\r\n”.详见RFC959。 6. client根据应答码执行对应的操作。若连接断开,可以跳到1;若发送下一条命令,跳到4。 单线程的client实现起来比较简单,在此基础上使用多线程进行改造,进而实现多线程下载,断点续传功能。 还有考虑一下各种异常情况的处理吧。 用MFC中的某个类(具体叫什么我也不记得,没用过)来编写的话就轻松多了。具体的细节到网上找一个源码看看就可以了。 最后要说的就是FTP控制端口是21,数据端口是20,。还有传输数据的时候两种模式要搞明白,主动模式 被动模式。
ShengFei01 2013-02-19
  • 打赏
  • 举报
回复
你找一下《WinSock网络编程经络》,有FTP的详细介绍和实现,这还有FTP的实现例子FtpClnt: http://download.csdn.net/detail/geoff08zhang/4571358
FingerStyle 2013-02-19
  • 打赏
  • 举报
回复
建立连接, 按照FTP协议发数据啊。 注意的地方 就是仔细看FTP协议的描述。

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧