ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:459KB ,
资源ID:13316950      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13316950.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3讲TCP客户端服务器程序示例FTP服务器和客户机Word文件下载.doc)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第3讲TCP客户端服务器程序示例FTP服务器和客户机Word文件下载.doc

1、3.4 发送指定字节函数write_all4 服务器程序分析4.1 程序流程(见右图)4.2 主要模块分析l 初始化模块getservbynamel 读取客户端请求模块read_line函数read_all函数l 处理客户端请求l 返回服务器响应write_all函数5 客户端程序分析5.1 程序流程(见右图)5.2 主要模块分析命令行参数(服务器IP,端口)l 读取用户输入ftp命令及命令参数获取(gets函数)l 发送请求给服务器分别发送命令长度和命令及参数l 读取服务器响应read_line函数、read_all函数6 程序运行状况分析(使用netsta t命令查看socket状态,采用

2、一些程序调试手段)6.1 正常运行状况l 在一个终端启动服务器程序(命令行:./ftpserver)显示提示信息,服务器在函数调用accept处阻塞,服务器socket状态为LISTENl 在另一终端启动客户端程序(命令行:./ftpclient 127.0.0.1 21)显示提示信息,服务器socket状态为LISTEN,新生成的连接socket状态为ESTABLISHED,客户端socket状态为ESTABLISHEDl 客户端和服务器进行一次通信,过程如下(1) 客户端调用函数gets从控制台读取用户输入(2) 客户端调用write_all函数发送命令长度(3) 客户端调用write_a

3、ll函数发送命令内容(4) 服务器调用read_line函数读取命令长度(5) 服务器调用read_all函数读取命令内容(6) 服务器处理客户端请求得到响应结果(7) 服务器调用write_all函数发送响应长度(8) 服务器调用write_all函数发送响应内容(9) 客户端调用read_line函数读取响应长度(10) 客户端调用read_all函数读取响应内容通信过程中的这10个步骤是并行的,没有严格的顺序l 结束通信过程(客户端主动关闭)(1) 客户端通过控制台键入CTRLD,使gets函数返回NULL,结束cli_requ函数调用,客户端主函数调用close关闭客户端socket,

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

5、协议收到服务器FIN字段之后进入TIME_WAIT状态,并返回对FIN字段的确认,超时后删除客户端socket(5) 服务器继续侦听其他连接请求,处于LISTEN状态6.2 服务器主动关闭连接为了模拟服务器主动关闭连接,我们在服务器read_requ函数之后加入return语句,函数serv_resp立即返回主程序,调用close函数关闭socket,TCP协议向客户端发送FIN数据段,客户端TCP协议收到FIN数据段后返回确认,进入CLOSE_WAIT状态,服务器进入FIN_WAIT2状态。客户端在发送完请求后阻塞在函数read_resp中,收到FIN字段将返回主函数,调用函数close关闭

6、socket,TCP协议向服务器发送FIN数据段,服务器确认该数据段进入TIME_WAIT状态。6.3 服务器进程终止ps a得到服务器的进程idkill id终止服务器进程l 终止服务器进程时没有客户端连接终止进程,关闭socketl 终止服务器进程时有未完成的客户端连接服务器终止进程,关闭socket(1) 如果客户端已经收到SYN ACK,connect函数成功,接下来向socket写数据时将失败(2) 服务器尚未确认客户端SYN,或SYN ACK丢失,connect函数失败l 终止服务器进程时已有客户端建立连接服务器进程终止,TCP协议向客户端发送FIN数据段,为了模拟客户端在不同时刻

7、收到FIN数据段,在客户端程序3个地方加入getchar暂停程序(1) 客户端在调用第一个write_all函数前收到FIN数据段,认为服务器不再发送数据,但write_all函数成功,数据到达服务器后,服务器将向客户端发送RST数据段,客户端在调用第二个write_all函数时将被SIGPIPE信号中断,显示Broken Pipe(2) 客户端在调用第二个write_all函数前收到FIN数据段,认为服务器不再发送数据,但write_all函数成功,数据到达服务器后,服务器将向客户端发送RST数据段,此时如果在RSt字段没有到达客户端之前调用函数read_resp,由于已经收到FIN字段,r

8、ead_resp函数将返回0;如果客户端已经收到RST数据段,则返回CONNREST(3) 客户端在调用read_resp函数前收到FIN数据段,read_resp函数返回06.4 服务器主机崩溃由于服务器主机复位,或断线会造成这种情况,主机崩溃和进程终止不同,系统不会关闭进程拥有的socketl 客户端在等待服务器数据时服务器主机崩溃调用read_resp函数过程中服务器主机崩溃,客户端将永远阻塞,除非设置了读超时选项l 客户端向服务器发送数据时服务器主机崩溃(1) write_all函数成功执行(拷贝到系统缓冲区),read_all函数阻塞,直到TCP协议重发数据达到限制次数后,返回错误E

9、TIMEOUT(2) 当发送数据需要经过路由器时,路由器会发现服务器主机不可达,向客户端返回ICMP消息,函数调用read_all返回错误EHOSTUNREACH。6.5 客户端主机崩溃(类似于服务器主机崩溃)l 服务器接收客户端请求时客户端主机崩溃服务器的read_requ函数将永远阻塞,由于服务器是循环服务器,因此服务器永远阻塞,导致服务失效,可以采用并发服务器避免l 服务器向客户端返回响应时客户端主机崩溃write_all函数成功执行(拷贝到系统缓冲区),read_all函数阻塞,直到TCP协议重发数据达到限制次数后,返回错误ETIMEOUT补充知识:多源文件程序编译1 分别编译各个源文

10、件,利用生成的中间文件(后缀为.o)生成可执行程序gcc c ftpclient.cgcc c comm_func.cgcc o 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 ftp

11、client 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.o comm_func.ogcc -o $ $gcc -c $l 第三种makefile.c.o规则,表示所有的.o文件依赖于对应的.c文件(文件名相同).c.o:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1