使用&Socket&通信实现&FTP&客户端程序
简介:&FTP 客户端如 FlashFXP,File Zilla
被广泛应用,原理上都是用底层的 Socket 来实现。FTP
客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通道。前者用于客户端向服务器发送命令,如登录,删除某个文件,后者用于接收数据,例如下载或上传文件等。本文详细阐述如何调用系统接口发送
FTP 命令实现文件上传下载等 FTP 客户端功能,让读者对 FTP 客户端的原理有一个深入的了解。
文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。
在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP
协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据。本文主要基于 LINUX 平台,对 FTP
客户端的实现原理进行详尽的解释并阐述如何使用 C 语言编写一个简单的 FTP 客户端。
相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个
Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。
FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制
Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP
服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。
一般来说,客户端有一个 Socket 用来连接 FTP 服务器的相关端口,它负责 FTP
命令的发送和接收返回的响应信息。一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。
对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个 Socket来完成。
如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个 Socket
来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。
如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口***。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。
主动模式下,客户端随机打开一个大于 1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1
端口***,并向服务器发出 “port N+1” 命令,由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口
的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
为了解决服务器发起到客户的连接问题,有了另一种 FTP
连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。
被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N & 1024 和 N+1) 。
第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P & 1024
),返回如“227 entering passive mode (127,0,0,1,4,18)”。
它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256
再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode
(h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip
地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1
号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
FTP 每个命令都有 3 到 4 个字母组成,命令后面跟参数,用空格分开。每个命令都以 "\r\n"结束。
要下载或上传一个文件,首先要登入 FTP 服务器,然后发送命令,最后退出。这个过程中,主要用到的命令有
USER、PASS、SIZE、REST、CWD、RETR、PASV、PORT、QUIT。
USER: 指定用户名。通常是控制连接后第一个发出的命令。“USER gaoleyi\r\n”: 用户名为gaoleyi
PASS: 指定用户密码。该命令紧跟 USER 命令后。“PASS gaoleyi\r\n”:密码为 gaoleyi。
SIZE: 从服务器上返回指定文件的大小。“SIZE file.txt\r\n”:如果 file.txt
文件存在,则返回该文件的大小。
CWD: 改变工作目录。如:“CWD dirname\r\n”。
PASV: 让服务器在数据端口***,进入被动模式。如:“PASV\r\n”。
PORT: 告诉 FTP 服务器客户端***的端口号,让 FTP 服务器采用主动模式连接客户端。如:“PORT
h1,h2,h3,h4,p1,p2”。
RETR: 下载文件。“RETR file.txt \r\n”:下载文件 file.txt。
STOR: 上传文件。“STOR file.txt\r\n”:上传文件 file.txt。
REST: 该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其它要求文件传输的 FTP 命令。“REST
100\r\n”:重新指定文件传送的偏移量为 100 字节。
QUIT: 关闭与服务器的连接。
客户端发送 FTP 命令后,服务器返回响应码。
响应码用三位数字编码表示:
第一个数字给出了命令状态的一般性指示,比如响应成功、失败或不完整。
第二个数字是响应类型的分类,如 2 代表跟连接有关的响应,3 代表用户认证。
第三个数字提供了更加详细的信息。
第一个数字的含义如下:
1 表示服务器正确接收信息,还未处理。
2 表示服务器已经正确处理信息。
3 表示服务器正确接收信息,正在处理。
4 表示信息暂时错误。
5 表示信息永久错误。
第二个数字的含义如下:
0 表示语法。
1 表示系统状态和信息。
2 表示连接状态。
3 表示与用户认证有关的信息。
4 表示未定义。
5 表示与文件系统有关的信息。
这是我自己写的客户端程序:
Socket 客户端编程主要步骤如下:
&&& 1、socket()
创建一个 Socket
&&&&2、connect()
与服务器连接
&&& 3、write() 和
read() 进行会话
&&& 4、close() 关闭
Socket 服务器端编程主要步骤如下:
socket() 创建一个 Socket
listen() ***
accept() 接收连接的请求
write() 和 read() 进行会话
close() 关闭 Socket
1、客户端和 FTP 服务器建立 Socket 连接。
2、向服务器发送 USER、PASS 命令登录 FTP 服务器。
3、使用 PASV 命令得到服务器***的端口号,建立数据连接。
4、使用 RETR/STOR 命令下载/上传文件。
5、在下载完毕后断开数据连接并发送 QUIT 命令退出。
当客户端与服务器建立连接后,服务器会返回 220 的响应码和一些欢迎信息。
TITLE="使用&Socket&通信实现&FTP&客户端程序" />
SOCKET control_
struct hostent *
struct sockaddr_
memset(&server, 0, sizeof(struct sockaddr_in));
control_sock = socket(AF_INET, SOCK_STREAM, 0);
hp = gethostbyname(server_name);
memcpy(&server.sin_addr,
hp-&h_addr, hp-&h_length);
server.sin_family = AF_INET;
server.sin_port = htons(port);
connect(control_sock,(struct sockaddr *)&server,
sizeof(server));
read(control_sock, read_buf, read_len);
当客户端发送用户名和密码,服务器验证通过后,会返回 230 的响应码。然后客户端就可以向服务器端发送命令了。
TITLE="使用&Socket&通信实现&FTP&客户端程序" />
sprintf(send_buf,"USER %s\r\n",username);
write(control_sock, send_buf, strlen(send_buf))
read(control_sock, read_buf, read_len);
sprintf(send_buf,"PASS %s\r\n",password);
write(control_sock, send_buf, strlen(send_buf));
read(control_sock, read_buf, read_len);
当客户端在下载/上传文件前,要先发送命令让服务器进入被动模式。服务器会打开数据端口并***。并返回响应码 227
和数据连接的端口号。
TITLE="使用&Socket&通信实现&FTP&客户端程序" />
sprintf(send_buf,"PASV\r\n");
write(control_sock, send_buf, strlen(send_buf));
read(control_sock, read_buf, read_len);
当客户端发送命令下载文件。服务器会返回响应码 150,并向数据连接发送文件内容。
TITLE="使用&Socket&通信实现&FTP&客户端程序" />
当客户端下载完毕后,发送命令退出服务器,并关闭连接。服务器会返回响应码 200。
TITLE="使用&Socket&通信实现&FTP&客户端程序" />
首先,服务器准备就绪后返回 220。客户端接收到服务器端返回的响应码后,相继发送“USER username” 和 “PASS
password” 命令登录。随后,服务器返回的响应码为 230 开头,说明客户端已经登入了。这时,客户端发送 PASV
命令让服务器进入被动模式。服务器返回如 “227 Entering Passive Mode
(127,0,0,1,13,67)”,客户端从中得到端口号,然后连接到服务器的数据端口。接下来,客户端发送下载命令,服务器会返回响应码
150,并从数据端口发送数据。最后,服务器返回 “226 transfer complete”,表明数据传输完成。
需要注意的是,客户端不要一次发送多条命令,例如我们要打开一个目录并且显示这个目录,我们得发送 CWD
dirname,PASV,LIST。在发送完 CWD dirname 之后等待响应代码,然后再发送后面一条。当 PASV
返回之后,我们打开另一个 Socket 连接到相关端口上。然后发送 LIST,返回 125 之后在开始接收数据,最后返回 226
表明完成。
在传输多个文件的过程中,需要注意的是每次新的传输都必须重新使用 PASV
获取新的端口号,接收完数据后应该关闭该数据连接,这样服务器才会返回一个 2XX
成功的响应。然后客户端可以继续下一个文件的传输。
上传文件与下载文件相比,登入验证和切换被动模式都如出一辙,只需要改变发送到服务器端的命令,并通过数据连接发送文件内容。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。kindle paperwhite 连接wifi为什么总是提示:请用ftp客户端软件打开,该怎么设置?
为什么我的KPW在多看系统下链接wifi时总是提示:请用ftp客户端软件打开:ftp;//10.16.230.252我下载了FileZille,但是不懂怎么设置,求教
KPW的多看系统
打开系统选项如果只是要连wifi,点“wifi未启用”的设置,点off就会on,接下来的操作和手机连wifi一样。“wifi传输”的开启功能是为了让你的数据线无用武之地的。
这样你可以不用数据线只用wifi进行电脑中文件和kpw中文件的传输。点击开启 会出现 “请用ftp客户端软件打开:ftp://……”不用下载任何ftp软件直接将ftp地址输入“计算机/我的电脑”的地址栏就可以打开你的kpw文件管理。接下来只需复制和粘贴。ps:有一些文件传输不成功,只需将文件名改成全英文或者全中文即可。
多看这个功能设计的真是太烂了。我在电脑上敲这个地址后,直接把电脑卡的假死了。。
我也出现了这个问题。。怎么弄呢?
请问你的这个问题解决了吗?我弄了几天都没有收拾好~要不刷回原生的吧~
已有帐号?
无法登录?
社交帐号登录filezilla(FTP客户端) V3.22.1 绿色中文版
filezilla(FTP客户端) 软件介绍 Soft content
filezilla 是一个免费的 ftp 客户端软件,虽然它是免费软件,可功能却一点也不含糊,比起那些共享软件来有过之而无不及,在新的版本中作者改进了手动下载的界面和功能等,不过该软件暂时还是不支持断点续传功能。总的来说是一款优秀的免费软件。
filezilla中文版 功能特色
断点续传(如果服务器支持)自定义命令站点管理保存活动连接暂检测连接超时防火墙支持SOCKS4/5和HTTP1.1代理支持SSL安全连接SFTP支持上传/下载队列管理支持文件拖放多语言支持GSS证明和Kerberos密码技术
可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持FTP&SFTP的FTP服务器软件。
filezilla中文乱码解决方案:使用Filezilla client FTP客户端登陆某些FTP站点会出现中文乱码,原因是FTP服务器端编码与filezilla client端编码不一致造成的。
解决方法如下:文件-站点管理-选中要登陆的站点-字符集-选择”强制UTF-8″ 或使用自定义字符集GB2312,二者之一定能解决中文显示乱码的问题。
FileZilla怎么用啊?FileZilla是一个FTP软件,客户端如果需要和FTP服务器连接的话,需要主机的地址或者IP地址,然后再填上用户名,密码和端口号,就可以快速连接了。如下图所见即是。
FileZilla在Windows, Linux, MacOS X下的均有对应的版本,也有 苹果版 与 Linux版。
FileZilla官方3.73,3.53两个版本被黑客加了后门,这个是安全无后门版本。
有后门版本的特征是:filezilla.exe大小6,8 MB,2个DLL库文件:ibgcc_s_dw2&1.dll libstdc + +&6.dll【特色功能】断点续传(如果服务器支持)自定义命令站点管理
filezilla(FTP客户端)下载地址[]
扫一扫:下载到手机
* 推荐下载+解压;软件通过+++扫描,问题软件请从评论反馈
* 本站为交流分享平台,资源以官方下载为主,来源于作者官方和网友的提交,仅供分享学习之用,如触犯您的权利敬请:
3.19MB/简体中文/3星
4.23MB/简体中文/4星
2.77MB/简体中文/3星
6.27MB/简体中文/3星
21.09MB/简体中文/3星
2.04MB/简体中文/3星
4.59MB/多国语言[中文]/3星
4.16MB/简体中文/3星
4.24MB/简体中文/3星
4.30MB/简体中文/3星
3.20MB/中文/3星11:10:24东奥会计在线字体:
[小编“娜写年华”]东奥会计在线高级会计师频道提供:本篇为2015职称计算机考试Internet考点辅导:FTP客户端软件的使用(3)。
2015职称计算机考试Internet考点辅导:FTP客户端软件的使用(3)
六、CuteFTP的选项设置
设置全局选项,调整其运行时的参数。
1.一般:用来调整CuteFTP在启动和退出时运行的任务、本地窗格中的默认文件夹、启动的日志文件及其文字样式、日志文件的存储路径与更新方法等。
2.连接:用来配置CuteFTP与连接服务器有关的参数,包括全局及每个站点并行传输的数量、连接重试的次数与时间间隔、匿名连接使用的账号和服务器显示的登录信息、连接网络的方式、使用代理服务器时的设置等。
3.安全:设置CuteFTP的访问策略,管理站点管理器的存储位置,调整使用OpenPGP、SSH2、SSL安全协议的参数。
4.传输:设置传输时需要使用的参数。
5.导航:可用来设置CuteFTP在发生一些典型事件时的响应动作。
6.显示:用来配置各种项目和窗口的显示方式,例如:默认显示的工具栏种类、图标的类型,各种提示和警告信息的出现时机和条件,发生特定事件时的提示音,CuteFTP使用的语言等。
7.帮助应用程序:设置查看帮助文件的程序及HTML编辑器的文字颜色分类等。
七、CuteFTP的工具选项配置
1.加密站点管理器数据、更改密码、删除密码。执行“工具”→“站点管理器”→“安全”→“加密站点管理器数据”菜单命令,可以为CuteFTP运行时添加打开密码;执行“工具”→“站点管理器”→“安全”→“更改密码”菜单命令,可以修改CuteFTP运行时的打开密码;执行“工具”→“站点管理器”→“安全”→“删除密码”菜单命令,可以删除CuteFTP运行时设置的密码
2.备份个人数据和注册数据(为了避免授权信息丢失造成软件的无法使用,激活软件后需要备份注册信息)。方法是执行“帮助”→“备份个人数据和注册数据”菜单命令,在打开的“备份注册位置”对话框中输入或选择备份文件的存储位置,单击“确定”完成备份文件的生成。
3.编辑自定义命令。执行“工具”→“自定义命令”→“编辑自定义命令”打开“自定义命令”编辑对话框,在其内编辑一组FTP命令后单击“确定”按钮,则这组命令就被添加到主菜单中的“自定义命令”下面了,使用者可以通过主菜单运行这些FTP命令。
4.输入FTP命令:一次只执行一条FTP命令,则可以采用手工输入的方法,执行“工具”→“输入FTP命令”菜单命令,可打开“输入FTP命令”对话框,在其中输入FTP命令后单击“确定”按钮,CuteFTP就会将其立即发送到FTP服务器上运行。
延伸阅读:
责任编辑:娜写年华
上一个文章:
下一个文章:
高级会计师导航
高级会计师网课
招生方案价格 / 购买
名师编写权威专业
针对性强覆盖面广
解答详细质量可靠
一书在手轻松过关
&&官方微信
东奥会计在线
微信号:dongaocom
& Inc. All Rights Reserved
微信关注东奥查看: 4485|回复: 9
ftp问题-用计算机客户端提示无法打开,请看有没有权限。
我用端口21做了一个FTP映射。用IIS本身做的FTP服务器是可以访问的。但是用外网地址加端口就访问不了了。
用计算机客户端提示无法打开,请看有没有权限。
用flashfxp提示列表错误。之前用花生壳也是这样的问题,不知道如何解决?
(129.64 KB, 下载次数: 2)
20:56 上传
ftp需要配合全端口映射,或者配合filezilla server
具体参考教程:
ftp需要配合全端口映射,或者配合filezilla server
具体参考教程:
/Pages_8_261.j ...
我现在用的win7的IIS搭的FTP。内网访问正常。我不想***filezilla了。
我看了全端口映射,在访问端也要***客户端。但是我的访问端有些是没有应用***权限的,但是装有FTP客户端,请问有没有解决方案?
我现在用的win7的IIS搭的FTP。内网访问正常。我不想***filezilla了。
我看了全端口映射,在访问端也 ...
不使用全端口映射时,可以映射二个端口来实现,二楼回复链接教程有说明。
映射时,映射一个21访问端口,再映射一个数据传输端口。
需要注意的是,需要在FTP服务端配置主动方式,并在映射时数据传输端口内外网保持一致。同时在FTP访问端使用主动方式来访问。
说错了,是被动方式。默认主动方式可能在一些环境不支持。
说错了,是被动方式。默认主动方式可能在一些环境不支持。
设置了,现在等DNS生效了。
还有就是win7 的IIS的FTP 主动和被动不知道在哪里设置,网上介绍的都是WIN2003或是WIN2008的。
本帖最后由 astankvai 于
21:49 编辑
现在的情况是这样的。总是提示域名指向不正确。
现在的情况是这样的。总是提示域名指向不正确。
DNS变更需要24小时后才完全生效,只能等。。
DNS变更需要24小时后才完全生效,只能等。。
早上试了生效了,但是还是访问不了。只有用全端口映射试了。
还有我的www.域名可以访问,去掉www.就访问不了,是需要做解析吗?
总觉得用全端口映射再装一个客户端,还是很不方便!
Powered by
| 网站反馈邮箱:(把#换成@)