中南大学计算机网络课程设计-文件传输程序.doc
第三章文件传输程序
包括客户端和效劳器程序,应实现以下功能:
客户端既能上传文件到效劳器,也能从效劳器下载文件;
在客户端上可显示文件根本信息和传输状态信息,可浏览效劳器上供下载的文件列表,选择某文件下载到本地某目录下;
效劳器端能接收客户端上传的文件,并保存在某一目录下;也能响应客户端的文件浏览与下载请求;
〔4〕增加其它附加创新功能。程序应具有图形化界面,美观友好。
随着计算机网络的迅速开展,人们的生活越来越离不开网络,如今网络编程已成为计算机开展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用WinsockAPI,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信。
一、Winsock控件
Winsock即WindowsSockets标准的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比拟高的情况,目前大多数的网络应用层协议都是基于TCP协议的〔例如常用的、FTP、SMTP、POP3等协议〕;UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的〔例如Real公司的RTSP协议,腾讯公司的QQ协议等〕。
二、Winsock控件通信的工作原理
Winsock控件是基于Socket标准创立的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次呼叫过程:呼叫者通过拨号与被呼叫者连接,当接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者那么称为“效劳器”,而号码那么为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“效劳器”正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和效劳器端应用程序。其大致流程如图1所示:
图1Winsock工作原理
端口号被规定在0~65535范围内的某一个整数,其中0~1023被预先定义的效劳器通信所占用〔如telnet占用23,占用端口80〕,所以最好使用1024~65535这些端口中的某一个,以免发生端口冲突。
三、根本方法
客户端要与效劳器端进行通信,首先,必须知道效劳器端的域名或IP地址〔RemoteHost属性〕,就像要和某人打前,必须知道对方的号码;其次,还必须和效劳器端约定相同的端口〔RemotePort属性〕,用于数据的输入和输出;最后,调用Connect方法与效劳器端建立连接。
效劳器端应设置一个监听端口〔LocalPort属性〕,端口应与客户端的端口相同,同时调用Listen方法时刻监听客户端的连接请求〔ConnectionRequest事件〕;当接收到客户端的连接请求时,可调用ConnectionRequest事件的Accept方法,这样与客户端的连接就建立了。
客户端和效劳器端成功建立连接后,任何一方都可以自由的发送数据〔SendData方法〕和接收数据〔GetData方法〕,这些方法都在DataArrival事件中。
3.3.1开发环境
操作系统:Windows7旗舰版
开发语言:C++/MFC
3.3.2程序界面设计
此程序根据功能需求,分别设计了客户端〔图3-3-2-1〕和效劳器端〔图3-3-2-2〕,实例如下:
图3-3-2-1
图3-3-2-2
3.3.3关键模块分析
文件选取
voidCTCPClientDlg::OnSelect()
{
inti;
CFileMyFile;
CStringstrlen;
CFileDialogFileDlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
AllFiles(*.*)|*.*||,NULL);
if(FileDlg.DoModal()==I