什么是FTP(FileTransferProtocol)文件传输和客户端之间数据的传输文件

  FTP是什么

  FTP(File Transfer Protocol)文件传输协议,用于远程服务器和本地主机之间传输文件。FTP是应用层协议,采用C/S架构,服务器和客户端之间通过TCP协议建立连接,服务器用来存储文件,客户端通过访问服务器来下载文件或向服务器上传文件。

  FTP在传输数据的时候使用控制连接(21端口)和数据连接(20端口),控制连接用来传输命令,数据连接用来传输数据;每一个FTP命令发送之后js访问ftp服务器的文件,FTP服务器都会返回一个字符串,包括响应代码和一些说明信息,响应代码主要是判断客户端的命令是否被成功执行。

  服务器和客户端之间数据的传输有两种模式:

  主动模式(PORT)

  1. 客户端和服务器的21端口建立控制连接

  2. 客户端发送PORT命令给服务器,PORT命令中包含了客户端将用啥端口接收数据

  3. 服务器通过20端口和客户端指定的端口之间传送数据

  被动模式(PASV)

  1. 客户端和服务器的21端口建立控制连接

  2. 客户端向服务器发送PASV命令,服务器在接收到PASV命令之后随机打开一个大于1024的端口js访问ftp服务器的文件,通知客户端在这个端口进行数据的传输

  3. 客户端收到这个端口号之后,客户端连接上服务器的这个端口,进行数据传输

  4.

  js访问ftp服务器的文件_js 访问器属性_js访问文件

  FTP的实现:

  FTP的基本过程:建立连接,传输数据,释放连接。

  socket编程的步骤:

  服务器:

  socket():创建套接字sock

  bind():进行绑定

  listen():监听连接的到来

  accept():接收新连接的请求

  send()和recv():进行会话

  close():关闭连接

  客户端:

  socket():创建套接字sock

  connect():给服务器发送一个连接请求

  send()和recv():进行会话

  close():关闭连接

  FTP服务器支持的功能: USER,PASS,LIST,RETR,PUSH,QUIT

  FTP服务器的响应码:

  220: 新用户服务准备好了

  221: 服务关闭控制连接,可以退出登录

  226: 关闭数据连接,请求的文件操作成功

  230:用户登录

  502: 命令未实现,不合法的命令

  530:账号或密码错误

  550: 未执行请求的操作

  553: 未执行请求的操作:文件名不合法

  客户端与服务器建立控制连接模块

  这里写图片描述

  相关函数:

  创建一个监听套接字:int socket_create(const char* ip,const int port)

  接受连接请求:int socket_accept(int sock)

  发送连接请求:int socket_connect(const char* ip,const int port)

  从sock中读取数据:int recv_data(int sock,char* buf,int bufsize)

  向sock发送响应码:int send_response(int sock,int code)

  从标准输入读取一行:void read_input(char *buf,int buffsize)

  用户登录模块

  使用FTP时必须先登录,在远程主机上获得相应的权限以后,方可上传或下载文件

  这里写图片描述

  相关函数:

  客户端用户登录发送信息函数int ftpclient_login(int sock_ctl)

  服务器用户登录接受信息函数int ftpserver_login(int sock_ctl

  确认用户信息int ftpserver_check_user(const char user,const char pass)

  主动模式的数据连接模块

  这里写图片描述

  当用户信息验证成功之后,客户端调用ftpclient_open_conn()函数创建数据连接,服务器循环接受并解析客户端发来的命令和参数;

  1. 客户端先创建一个监听套接字sock_listen,之后给服务器send_response() 发送一个确认,告诉服务器已经创建好了一条数据链路;

  2. 这时服务器调用ftpserver_start_data_conn 函数,先收到客户端发来的确认,根据控制端口号调用getpeername 函数获取与某个套接字关联的外地协议地址,调用inet_ntop 函数将ip地址进行转化,最后调用socket_connect 函数发起连接请求

  相关函数:

  创建数据监听连接:int ftpserver_start_data_conn(int sock_ctl)

  发起数据连接请求:int ftpclient_open_conn(int sock_ctl)

  访问文件列表模块

  这里写图片描述

  相关函数:

  接收服务器发来的文件信息int ftpclient_list(int sock_ctl,int sock_data)

  向客户端发送文件信息int ftpserver_list(int sock_data,int sock_ctl)

  文件下载模块

  这里写图片描述

  相关函数:

  void ftpserver_retr(int sock_data,int sock_ctl,char *filename)

  int ftpclient_get(int sock_data,char *filename)

  文件上传模块

  这里写图片描述

  相关函数:

  void ftpserver_push(int sock_data,int sock_ctl,char* filename)

  int ftpclient_put(int sock_data,char *filename)

  客户端退出服务器

  这里写图片描述

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1409
0 评论
703

发表评论

!