- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件传输程序设计
Internet网络程序设计实验报告 基于Socket的文件传输程序设计
姓名:莫 敌
班级:软件 0904
学号:U200917895
指导老师:陆永忠
2012.03.31
目 录
1 实验目的及要求 2
1.1 实验目的 2
1.2 实验要求 2
2 实验环境 3
3 实验程序设计 3
3.1 设计思想 3
3.2 程序设计流程框图 4
3.3 详细设计 5
3.3.1 界面设计 5
3.3.2 主要功能实现 6
3.4 运行结果 9
4 实验感想 11
实验目的及要求
实验目的
熟悉Socket的通讯机制,了解网络程序的设计方法。重点掌握基于TCP协议的Socket网络编程。
实验要求
设计界面,在服务器端和客户端传输图片和文件。如果是图片请显示该图片,如果是其他文件,则保存。
实验环境
编译环境:Windows 7 + Visual Studio 2010 使用MFC编写。
运行环境:Windows 7操作系统。
实验程序设计
设计思想
根据实验的要求:在服务器和客户端之间传输文件和图片,则需要程序提供一种可靠的网络传输服务来保证文件在传输过程中无丢失、损坏。在分析了传输层协议TCP协议和UDP协议后,了解到TCP协议提供的是一种面向连接的、可靠的字节流服务,而UDP协议提供的是一种无连接的、不可靠的数据报服务。由于程序的需求,即必须保证文件传输的可靠性,于是,我采用基于TCP协议的Windows sockets来设计实现本实验。
程序设计流程框图
图1程序设计流程框图
详细设计
基于TCP的socket编程流程:
服务器端:
创建套接字(socket)。
将套接字绑定到一个本地地址和端口上(bind)。
将套接字设为监听模式,准备接收客户端请求(listen)。
等待客户端请求到来。当请求到来后,接收连接请求,返回一个新的对应于此次连接的套件字(accept)。
用返回的套接字和客户端进行通信(send/recv)。
返回,等待另一客户端请求。
关闭套接字。
客户端:
创建套接字(socket)。
向服务器发出连接请求(connect)。
和服务器端进行通信(send/recv)。
关闭套接字。
界面设计
图2程序界面
由于程序实现的功能单一简单,所以我的程序界面设计如图2所示。
程序由两个用户可操作的控件组成:IP地址控件,用户输入将要接收文件的接收方IP地址;“发送文件”按钮,单击选择用户要发送的文件并发送所选文件数据。
主要功能实现
套接字库加载:
AfxSocketInit()
接收线程:
UINT RecvProc( LPVOID pParam )
{
while (TRUE)
{
CSocket tmpSock;
CSocket servSock;
tmpSock.Create(5000);
tmpSock.Listen(1);
tmpSock.Accept(servSock);
char fileNameRecv[500] = {0};
int a = servSock.Receive(fileNameRecv, 500);
CFileDialog saveDlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
所有文件(*.*)|*.*||);
saveDlg.m_ofn.lpstrFile = fileNameRecv;
if (IDOK == saveDlg.DoModal())
{
CFile recvFile;
CString recvPathName;
recvPathName = saveDlg.GetPathName();
recvFile.Open(recvPathName, CFile::modeCreate | CFile::modeWrite);
UINT uiLength;
servSock.Receive(uiLength, 4);
int iBufSize = 1024 * 5;
int iSize = iBufSize;
LPBYTE pBuf = new BYTE[iBufSize];
int iNumByte;
UINT uiTotal = 0;
while (uiTotal uiLength)
{
if ((int)(uiLength - uiTotal) iBufSize)
{
文档评论(0)