TCP客户端服务器程序示例FTP服务器和客户机_第1页
TCP客户端服务器程序示例FTP服务器和客户机_第2页
TCP客户端服务器程序示例FTP服务器和客户机_第3页
TCP客户端服务器程序示例FTP服务器和客户机_第4页
TCP客户端服务器程序示例FTP服务器和客户机_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Ch3 TCP客户端服务器程序示例(FTP服务器和客户机)1 概述1.1 相对完整的客户端服务器程序,展示编写网络程序的基本过程1.2 分析客户端服务器程序的各种运行状况2 客户端服务器通信协议2.1 通信协议客户端和应用程序对交互信息的格式约定2.2 示例中使用的通信协议客户端和服务器数据包示例:3 公用函数分析3.1 地址转换函数addr_conv3.2 读取命令头函数read_line3.3 读取指定字节函数read_all3.4 发送指定字节函数write_all4 服务器程序分析4.1 程序流程(见右图)4.2 主要模块分析l 初始化模块getservbynamel 读取客户端请求模

2、块read_line函数read_all函数l 处理客户端请求l 返回服务器响应write_all函数5 客户端程序分析5.1 程序流程(见右图)5.2 主要模块分析l 初始化模块命令行参数(服务器IP,端口)l 读取用户输入ftp命令及命令参数获取(gets函数)l 发送请求给服务器分别发送命令长度和命令及参数write_all函数l 读取服务器响应read_line函数、read_all函数6 程序运行状况分析(使用netsta t命令查看socket状态,采用一些程序调试手段)6.1 正常运行状况l 在一个终端启动服务器程序(命令行:./ftpserver)显示提示信息,服务器在函数调用

3、accept处阻塞,服务器socket状态为LISTENl 在另一终端启动客户端程序(命令行:./ftpclient 21)显示提示信息,服务器socket状态为LISTEN,新生成的连接socket状态为ESTABLISHED,客户端socket状态为ESTABLISHEDl 客户端和服务器进行一次通信,过程如下(1) 客户端调用函数gets从控制台读取用户输入(2) 客户端调用write_all函数发送命令长度(3) 客户端调用write_all函数发送命令内容(4) 服务器调用read_line函数读取命令长度(5) 服务器调用read_all函数读取命令内容(6)

4、服务器处理客户端请求得到响应结果(7) 服务器调用write_all函数发送响应长度(8) 服务器调用write_all函数发送响应内容(9) 客户端调用read_line函数读取响应长度(10) 客户端调用read_all函数读取响应内容通信过程中的这10个步骤是并行的,没有严格的顺序l 结束通信过程(客户端主动关闭)(1) 客户端通过控制台键入CTRLD,使gets函数返回NULL,结束cli_requ函数调用,客户端主函数调用close关闭客户端socket,进入FIN_WAIT1状态(2) 服务器的socket在接收完数据后返回对客户端的FIN字段的确认,进入CLOSE_WAIT状态,

5、客户端进入FIN_WAIT2状态,为了查看这两个状态需要使服务器在调用close函数前暂停(加入getchar函数)(3) 服务器收到客户端的FIN字段时正阻塞在read_line函数的调用过程中,read_line函数将返回0,使得read_requ函数结束,serv_resp函数结束(4) 函数serv_resp结束后,服务器主程序调用函数close关闭socket,服务器发送FIN字段进入LAST_ACK状态,(当网络速度较慢时可以查看到这个状态)客户端TCP协议收到服务器FIN字段之后进入TIME_WAIT状态,并返回对FIN字段的确认,超时后删除客户端socket(5) 服务器继续侦

6、听其他连接请求,处于LISTEN状态6.2 服务器主动关闭连接为了模拟服务器主动关闭连接,我们在服务器read_requ函数之后加入return语句,函数serv_resp立即返回主程序,调用close函数关闭socket,TCP协议向客户端发送FIN数据段,客户端TCP协议收到FIN数据段后返回确认,进入CLOSE_WAIT状态,服务器进入FIN_WAIT2状态。客户端在发送完请求后阻塞在函数read_resp中,收到FIN字段将返回主函数,调用函数close关闭socket,TCP协议向服务器发送FIN数据段,服务器确认该数据段进入TIME_WAIT状态。6.3 服务器进程终止ps a得到

7、服务器的进程idkill id终止服务器进程l 终止服务器进程时没有客户端连接终止进程,关闭socketl 终止服务器进程时有未完成的客户端连接服务器终止进程,关闭socket(1) 如果客户端已经收到SYN ACK,connect函数成功,接下来向socket写数据时将失败(2) 服务器尚未确认客户端SYN,或SYN ACK丢失,connect函数失败l 终止服务器进程时已有客户端建立连接服务器进程终止,TCP协议向客户端发送FIN数据段,为了模拟客户端在不同时刻收到FIN数据段,在客户端程序3个地方加入getchar暂停程序(1) 客户端在调用第一个write_all函数前收到FIN数据段

8、,认为服务器不再发送数据,但write_all函数成功,数据到达服务器后,服务器将向客户端发送RST数据段,客户端在调用第二个write_all函数时将被SIGPIPE信号中断,显示Broken Pipe(2) 客户端在调用第二个write_all函数前收到FIN数据段,认为服务器不再发送数据,但write_all函数成功,数据到达服务器后,服务器将向客户端发送RST数据段,此时如果在RSt字段没有到达客户端之前调用函数read_resp,由于已经收到FIN字段,read_resp函数将返回0;如果客户端已经收到RST数据段,则返回CONNREST(3) 客户端在调用read_resp函数前收

9、到FIN数据段,read_resp函数返回06.4 服务器主机崩溃由于服务器主机复位,或断线会造成这种情况,主机崩溃和进程终止不同,系统不会关闭进程拥有的socketl 客户端在等待服务器数据时服务器主机崩溃调用read_resp函数过程中服务器主机崩溃,客户端将永远阻塞,除非设置了读超时选项l 客户端向服务器发送数据时服务器主机崩溃(1) write_all函数成功执行(拷贝到系统缓冲区),read_all函数阻塞,直到TCP协议重发数据达到限制次数后,返回错误ETIMEOUT(2) 当发送数据需要经过路由器时,路由器会发现服务器主机不可达,向客户端返回ICMP消息,函数调用read_all

10、返回错误EHOSTUNREACH。6.5 客户端主机崩溃(类似于服务器主机崩溃)l 服务器接收客户端请求时客户端主机崩溃服务器的read_requ函数将永远阻塞,由于服务器是循环服务器,因此服务器永远阻塞,导致服务失效,可以采用并发服务器避免l 服务器向客户端返回响应时客户端主机崩溃write_all函数成功执行(拷贝到系统缓冲区),read_all函数阻塞,直到TCP协议重发数据达到限制次数后,返回错误ETIMEOUT补充知识:多源文件程序编译1 分别编译各个源文件,利用生成的中间文件(后缀为.o)生成可执行程序gcc c ftpclient.cgcc c comm_func.cgcc o

11、ftpclient ftpclient.o comm_func.o2生成makefile,利用make整体编译make命令:make f makefilemakefile中最重要的是描述文件的依赖关系,一般格式为target:componets 依赖关系TAB rule规则(TAB不能省略)l 第一种makefile(内容较多,容易理解)#ftpclient makefile注释ftpclient:ftpclient.o comm_func.o gcc -o ftpclient ftpclient.o comm_func.o#以下为各个组成元素的子元素及生成方法ftpclient.o:ftpclient.c comm_func.hgcc -c ftpclient.ccomm_func.o:comm_func.c comm_func.hgcc -c comm_func.cl 第二种makefile$-目标文件 ,$-所有的依赖文件,$< -第一个依赖文件#ftpclient makefileftpclient:ftpclient.o comm_func.ogcc -o $ $ftpclient.o:ftpclient.c comm_func.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论