文件传输程序设计_第1页
文件传输程序设计_第2页
文件传输程序设计_第3页
文件传输程序设计_第4页
文件传输程序设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、Internet网络程序设计实验报告基于Socket的文件传输程序设计姓名:莫 敌班级:软件 0904学号:U200917895指导老师:陆永忠2012.03.31目 录1实验目的及要求21.1实验目的21.2实验要求22实验环境33实验程序设计33.1设计思想33.2程序设计流程框图43.3详细设计53.3.1界面设计53.3.2主要功能实现63.4运行结果94实验感想111 实验目的及要求1.1 实验目的熟悉Socket的通讯机制,了解网络程序的设计方法。重点掌握基于TCP协议的Socket网络编程。1.2 实验要求设计界面,在服务器端和客户端传输图片和文件。如果是图片请显示该图片,如果是

2、其他文件,则保存。2 实验环境编译环境:Windows 7 + Visual Studio 2010 使用MFC编写。运行环境:Windows 7操作系统。3 实验程序设计3.1 设计思想根据实验的要求:在服务器和客户端之间传输文件和图片,则需要程序提供一种可靠的网络传输服务来保证文件在传输过程中无丢失、损坏。在分析了传输层协议TCP协议和UDP协议后,了解到TCP协议提供的是一种面向连接的、可靠的字节流服务,而UDP协议提供的是一种无连接的、不可靠的数据报服务。由于程序的需求,即必须保证文件传输的可靠性,于是,我采用基于TCP协议的Windows sockets来设计实现本实验。3.2 程序

3、设计流程框图创建新的通信端点将一个本地地址关联到套接字上宣布接受连接,给出监听队列大小阻塞,直到有客户企图连接发送/接受数据释放连接结束开始主动尝试建立一个连接创建新的通信端点发送/接受数据释放连接结束开始服务器端客户端图1程序设计流程框图3.3 详细设计基于TCP的socket编程流程:服务器端: 创建套接字(socket)。 将套接字绑定到一个本地地址和端口上(bind)。 将套接字设为监听模式,准备接收客户端请求(listen)。 等待客户端请求到来。当请求到来后,接收连接请求,返回一个新的对应于此次连接的套件字(accept)。 用返回的套接字和客户端进行通信(send/recv)。

4、返回,等待另一客户端请求。 关闭套接字。客户端: 创建套接字(socket)。 向服务器发出连接请求(connect)。 和服务器端进行通信(send/recv)。 关闭套接字。3.3.1 界面设计图2程序界面由于程序实现的功能单一简单,所以我的程序界面设计如图2所示。程序由两个用户可操作的控件组成:IP地址控件,用户输入将要接收文件的接收方IP地址;“发送文件”按钮,单击选择用户要发送的文件并发送所选文件数据。3.3.2 主要功能实现套接字库加载:AfxSocketInit()接收线程:UINT RecvProc( LPVOID pParam )while (TRUE)CSocket tmp

5、Sock;CSocket servSock;tmpSock.Create(5000);tmpSock.Listen(1);tmpSock.Accept(servSock);char fileNameRecv500 = 0;int a = servSock.Receive(fileNameRecv, 500);CFileDialog saveDlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 所有文件(*.*)|*.*|);saveDlg.m_ofn.lpstrFile = fileNameRecv;if (IDOK = sa

6、veDlg.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 BYTEiBufSize;int iNumByte;UINT uiTotal =

7、 0;while (uiTotal uiLength)if (int)(uiLength - uiTotal) iBufSize)iSize = uiLength - uiTotal;int iCount = 0;while (iCount GetDlgItem(IDC_IPADDRESS1)-GetWindowText(IPstr);if (sendSock.Connect(IPstr, 5000) = 0)return;CFile sendFile;sendFile.Open(openDlg.GetPathName(), CFile:modeRead);sendSock.Send(open

8、FileName, 500);UINT uiLength;uiLength = sendFile.GetLength();sendSock.Send(&uiLength, 4);int iBufSize = 1024 * 5;int iSize = iBufSize;LPBYTE pBuf = new BYTEiBufSize;int iNumByte;UINT uiTotal = 0;while (uiTotal uiLength)if (int)(uiLength - uiTotal) iBufSize)iSize = uiLength - uiTotal;iSize = sendFile

9、.Read(pBuf, iSize);int iCount = 0;while (iCount iSize)iNumByte = sendSock.Send(pBuf, iSize - iCount);iCount += iNumByte;if (iCount iSize)sendFile.Seek(iSize - iCount, CFile:current);uiTotal += iCount;sendFile.Close();sendSock.Close();3.4 运行结果说明:为了便于测试和观察,选择127.0.0.1的发送IP地址进行单机测试。图3程序运行启动界面双击打开myFile

10、Transfer.exe可执行程序后的程序启动界面如图3所示,然后在“对方IP地址”栏中输入本地回送地址127.0.0.1准备进行发送文件。图4发送文件选择界面单击“发送文件”按钮后,弹出如图4所示的文件选择界面,选择要发送的文件并单击“打开”按键,确定选择并将所选文件发送给接收方。图5接受方接收到文件当接收方接收到发送方传来的文件时,接收方程序弹出如图5所示的“保存”界面,提示用户接收文件成功并进行保存。图6接收图片自动显示当接收方接收的文件为图片时,程序调用操作系统默认的图片浏览器自动打开浏览接收到的图片。当接收的是非图片文件时,程序则只是保存该文件,而不自动打开。4 实验感想通过独立完成

11、了这次实验的全部内容,我对网络编程有了更全面、深刻地认识和了解,尤其是对Windows socket的掌握和编程应用。由于我对MFC较为熟悉,所以在整个实验过程中,我采用MFC进行编程来实现这个传输文件的程序。在程序实现之前,我通过网络上的基于socket网络编程资料和老师课上讲解的内容,认真全面地学习了Windows socket的运行机制和其在网络编程上的应用方法。在设计实现阶段,我最先使用的是基础SOCKET类,但在通信双方传送文件的基本信息的具体实现时,遇到了不少的麻烦。比如SOCKET类中的send方法的第二个参数类型是“const char *”用来指明一个存放将要发送数据的缓冲区,但在传文件信息长度int类型等非char *的变量时转化很麻烦。于是,我查看MSDN文档了解到MFC已为开发者封装了一个很简便的CSOCKET类。应用CSOCKET类能很方便容易地解决上面的问题,而且实现网络通信的流程也很清晰,最终我采用MFC封装的CSOCKET类编码实现的这次实验内容。在接收图片自动显示的问题上,我试验了两种实现方式:用一个MFC中的承托图片控件来显示和调用操作系统默认的图片浏览程序来显示,对比操作效果和用户使用习惯,后者的解决方案更好,所以最终我采用调用操作系统默认的图片浏览

温馨提示

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

最新文档

评论

0/150

提交评论