关于开源项目——C语言实现FTP服务器的结构解析

项目地址:https://github.com/beckysag/ftp

 

针对此开源项目的说明,结构分析。

 服务端整体框架:

1.     从命令行输入得到服务端绑定端口号

2.     设置套接口选项,创建监听套接字。

3.     用while循环 + fork实现子进程与客户端的交流。

4.     父进程的交流套接字关闭,子进程的监听套接字关闭。

 

在子进程与客户端的交流中:

1.     发送220欢迎应答码。

2.     接收客户端传来的用户名、密码信息,与文件的内容相比对,如果有,则认证成功,发送230应答码;失败发送430应答码,并退出。

3.     循环处理用户的请求,接收客户端传来的命令,此项目提供如下命令的解析。接收到USER,PASS,LIST,RETR则发送应答码200,收到QUIT发送应答码221(),其他命令视为无效命令。

4.     如果应答码为200,继续处理。采用被动模式,客户端创建监听套接字等待服务端主动连接,建立数据连接,之前建立的是控制连接。

5.     如果接收到LIST命令,将当前目录重定向到文件中,在数据连接中发送文件中的内容,发送成功后,在控制连接中发送应答码226,关闭数据连接;

如果接收到RETR命令,则打开文件,在数据连接中传送文件,发送成功后,在控制连接中发送应答码226,关闭数据连接。

 

客户端整体框架:

1.     从命令行输入得到服务器主机名和端口号。

2.     通过getaddrinfo得到期望的返回类型信息的暗示,实现主机名和服务器名转换成套接口地址结构的功能,与服务端进行连接。

3.     输入用户名、密码进行验证。

4.     发送命令到服务器,接收服务器返回应答码,如接收到221,则退出;接收到502,则显示不合法的输入;接收到200,处理命令。

接收到200,打开数据连接,客户端创建监听套接字,在之前的控制连接上发送一个ACK确认,接收服务器的连接,关掉监听套接字。如果是LIST命令,先通过控制连接接收服务器传来的消息,在通过数据连接打印出目录,最后接收服务器传来完成的消息,关闭数据连接。如果是RETR命令,打开文件失败返回错误码550,关闭数据连接进行下一个循环;文件存在则通过数据连接写入文件,关闭数据连接。

你可能感兴趣的:(Linux,C编程)