基于TCP的文件传输程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机网络系统实践》报告
设计题目:网络文件传输
学生姓名:郑波
学号:44
专业班级:计算机科学与技术13-2班
2015年12月
一、设计要求
1、实现单线程文件传输功能
2、在以上的基础上,掌握多线程技术,在文件网络传输时,可选择单
线程或多线程
3、加入异常控制机制,增强程序的鲁棒性(Robust)
4、了解如何提高套接字传输的速率,以及如何加强传输的稳定性
二、开发环境与工具
Windows7下Microsoft Visual Stuio
三、设计原理
1、网络传输协议
TCP/IP协议栈中的两个协议:
TCP(Transmission Control Protocol):传输控制协议
UDP(User Datagrm Protocal):用户数据报协议
TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚
拟连接。该连接一旦建立,两台计算机之间就可以把数据当做一个双向
字节流进行交换。
UDP是无连接的通信协议,UDP不保证可靠数据的传输,但能够向若干个目标发送数据,接受发自若干个源的数据。就是说,如果一个主机
向另外一台主机发送数据,这个数据就会立即发出,而不管另外一台主
机是否已准备接收数据。如果另外一台主机接收到了数据,它不会确认
收到与否。
本次工程目的是传输文件,显然需要用TCP建立连接,而TCP连接需要“三次握手”。
2、三次握手
三次握手具体过程:
1、客户端主动与服务器联系,TCP首部控制位中的SYN设置为1,发送
带有SYN的TCP段,并把初始序号告诉对方
2、服务端收到带有SYN的报文,记录客户端的初始序号,选择自己的初
始序号,设置控制位中的SYN和ACK。因为SYN占用一个序号,所以
确认序号设置为客户端的初始序号加1,对客户端的SYN进行确认
3、服务端的报文到达客户端,客户端设置ACK控制位,并把确认好设为
服务器的初始序号加1,以确认服务器的SYN报文段,这个报文只是
确认消息,告诉服务器已经成功建立了连接
四、系统功能描述及软件模块划分
1、系统功能描述
软件实现了点对点的文件传输。传输前的接收提醒以及传输过程中的控制。
2、软件模块划分
本程序可以划分成以上三个模块:传输控制模块,文件传输模块和服务连接模块。其中:
服务连接模块用来建立客户端到服务器的连接
文件传输模块主要用两个线程:_SendThread和_ListenThread来完成,实现发送和接收文件的功能。
传输控制模块主要通过封装好的可串行化信息类CMessage互相传递两端的文件操作消息,响应“暂停传输”,“关闭连接”等功能
五、设计步骤
1、服务连接模块
先要建立起客户端与服务器之间的连接,大致过程如下:
①服务器启动:
if(m_nServerType == SERVER)
{
|*.*||",this);
"另存为");
strcpy
if()==IDOK){
if(m_bIsWait==FALSE){
MessageBox(_T("对方已经取消文件发送"), _T("警告"), MB_ICONEXCLAMATION);
return ;
}
m_bIsClient=FALSE;
m_strPath=();
客园博客,2012.
.计算机网络教程.高等教育出版社,2008. 深入详解. 户端服务器的消息控制。 ②客户端服务器建立连接的过程 答:使用MFC 的CSocket 类简化接字,Listen()连接,服务器OnAccept 响应,并使用另外创建的套接字开始与客户端通信。
③程序的鲁棒性怎么样
答:程序在创建套接字,连接服务器等操作时用了比较多的错误检测与提示,比如在套接字创建过程:对Create()的返回值进行分析,如果是0则代表创建失败,立即调用GetLastError()分析错误原因,并使用MessageBox 弹出提醒用户。
另外也使用了TRY …CATCH 块,增强程序的错误检测和恢复能力。
十一、设计体会
1、之前写的程序大多都是“单机”的,这次工程的实践让我更加深入地了解了互联网程序的编写,认识了Socket 套接字的使用。
2、通过编写程序,在应用层面理解了TCP 的“三次握手”,深切体会到了基于TCP 连接的传输稳定性。
3、在设计时遇到了阻塞和非阻塞的选择,好在工程实现的时候,由于微软对Win_Sock 的封装,结合CSocket 、CSocketFile 、CArchive 三个类的使用,很好地简化了两端的通信问题,从而可以放心地把传输数据作为阻塞方式放到新开的线程中。
4、在工程初步完成的时候,把程序放到两台不处于一个局域网内的机子上,发现不能连接。通过课本的翻阅和网上资料的查询,了解了NAT 以及NAT
穿越技术,知道了许多基于互联网的技术都需要用到“NAT穿孔”。
5、文件传输涉及到了很多的异常处理,在之前编写的大部分程序要么没有异常处理,要么单纯地使用if else解决,在本次工程中用到了一些TRY CATCH 块,体会到了异常处理机制的重要性。
路由器配置实验
一、实验目的
1. 认识路由器的端口、型号
2.掌握路由器的路由配置
3. 理解网络互联的基本原理
二、实验环境与设备
本实验在 PC 机上利用模拟软件 Packet Tracer V6 进行操作。
三、实验内容
1. 路由器接口的配置
2. 静态路由配置
3. 默认路由配置
4. 动态路由配置
本次实验的主要任务是了解路由器的基本设置,和网络之间的连接关系。通过这次的实验很好的掌握了各个网段之间的,各个路由器下的 pc 的连接情况。通过对静态,默认,动态路由配置,使得各个路由器下的 PC 相互通信。
四、实验步骤