Socket网络编程大作业.doc_第1页
Socket网络编程大作业.doc_第2页
Socket网络编程大作业.doc_第3页
Socket网络编程大作业.doc_第4页
Socket网络编程大作业.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

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

文档简介

网络编程技术大作业项目开发人杨腾飞开发人班级20102 开发人学号2010082225开发人专业软件工程项目名称MFC实现局域网内点对点的文件传输成绩 (70%)网络编程技术大作业 版本:0.1.0 第14页修 改 履 历修改编号日期修改人版本号修改内容12013.5.24杨腾飞1.0编写需求分析22013.5.25杨腾飞1.1修改模块接口设计32013.5.26杨腾飞1.2编写自我评价TCP/IP协议的概述TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP协议使用范围极广,是目前异种网络通信使用的唯一协议体系,适用于连接多种机型,既可用于局域网,又可用于广域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有TCP/IP协议。TCP/IP协议已成为目前事实上的国际标准和工业标准。基于TCP/IP协议组的网络模型分为应用层、传输层、网络层、链路层和物理层这样五个层次。TCP/IP协议组位于应用程序和硬件之间,指挥数据在网络各层中传递。其中传输层的协议包括传输控制协议(TCP)和用户数据报协议(UDP) ,它们都建立在IP协议的基础上,其中TCP提供可靠的面向连接服务,UDP提供简单的无连接服务。传输层提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。TCP协议是面向连接的协议,它提供可靠的字节流服务,在进行数据传输之前必须先建立连接,经三次握手确定后才开始数据传送。UDP进行数据报传输使用的是不可靠、无连接的协议。网络层包括互连网协议 IP,互连网控制报文协议 ICMP和互连网组管理协议IGMP。其中IP协议完成大部分的工作,负责数据传输和路由的选择等。I P报头中的地址和网卡相联系( 具体还涉及地址解析和反向地址解析协议),TCP 、UDP报头中的端口号侧对应着网络主机上不同的程序。TCP/IP体系结构如图一所示:TCP/IP体系结构Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。目 录1文档概述51.1文档目的和范围51.2术语/缩略语51.3参考文档52系统概述52.1项目说明52.2需求分析52.3可行性或难点分析63通信协议设计63.1通信流程63.2数据格式63.3会话举例64系统设计说明64.1模块整体结构图64.2使用说明书65模块详细说明65.1核心通信模块75.1.1socket函数的功能75.1.2通信时序图75.2用户接口模块75.3类/接口/函数说明76结论76.1自我评价或总结76.2需要进一步学习的内容76.3系统扩展计划71 文档概述1.1 文档目的和范围明确任务和需求,使得软件开发人员知道软件开发流程,软件测试时更有条理。1.2 术语/缩略语序号术语/缩略语说明1API应用程序编程接口2Socket网络套接口3IPIP是英文Internet Protocol(网络之间互联的协议)的缩写4Client/Server客户机/服务器模式5WinsockWindows下网络编程的规范1.3 参考文档序号文档名作者时间版本1Windows网络编程罗莉琴 詹祖桥2011年4月第1版2 系统概述2.1 项目说明本软件是把客户端和服务器集为一体,通过tcp协议,实现可靠的文件传输功能。运行环境:win72.2 需求分析该程序实现局域网内的文件传输功能,包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将文件发送到服务器端和接受服务器端发送来的文件。服务器端程序:负责相应客户端的消息和接收客户端发送来的文件。 2.3 可行性或难点分析本软件的难点在于进行文件传输时只能传送较小的文件,对于大文件的传输还有部分问题尚待解决。此外,传输文件时的效率较低,程序容易出现假死现象,所以考虑到如果使用多线程应该能提高效率,但是基于自身能力和时间问题,这部分优化没有做,只是完成了基本的文件传输功能。3 通信协议设计3.1 通信流程3.2 会话举例1.选择服务器端的话会自动获取本机IP,可以自定义端口号。然后点击“启动”按钮,可以开启服务器监听有无客户端连接。2.选择客户端可以自己输入要连接的服务器的IP地址和端口号。点击“连接”按钮,可以连接到服务器,然后“选择文件”按钮才可以被点击。3.服务器和客户端连接后的状态如下所示:4.选择一个文件后点击发送,文件接收成功后会出现提示框。4 系统设计说明4.1 模块整体结构图4.2 使用说明书程序使用MFC做的界面,所以操作简单,直接用鼠标点击相应按钮即可。5 模块详细说明5.1 核心通信模块该函数主要用于处理文件传输的控制消息。发送文件函数SendFile,该函数在发送文件线程被调用,其代码如下:void CFileTransfersDlg:SendFile(CSocket &senSo)m_bIsTransmitting = TRUE;/打开要发送的文件 CFile file;if(!file.Open(m_strPath, CFile:modeRead | CFile:typeBinary)AfxMessageBox(_T(文件打开失败);GetDlgItem(IDC_DISCONNECT)-EnableWindow(TRUE);GetDlgItem(IDC_SELECT_FILE)-EnableWindow(TRUE);GetDlgItem(IDC_STOP_TRANSFERS)-EnableWindow(FALSE);senSo.Close();return ;m_ctrlProgress.SetRange32(0, m_dwFileSize);int nSize = 0, nLen = 0;DWORD dwCount = 0;char bufBLOCKSIZE = 0;file.Seek(0, CFile:begin);/开始传送文件 for(;)/每次读取BLOCKSIZE大小的文件内容 nLen = file.Read(buf, BLOCKSIZE);if(nLen = 0)break;/发送文件内容 nSize = senSo.Send(buf, nLen);dwCount += nSize;m_ctrlProgress.SetPos(dwCount);CString strTransfersSize;strTransfersSize.Format(%ld 字节, dwCount);GetDlgItem(IDC_RECEIVE_SIZE)-SetWindowText(strTransfersSize);/用户是否要停止发送 if(m_bIsStop)m_bIsStop = FALSE;break;if(nSize = SOCKET_ERROR)break; /关闭文件file.Close(); /关闭套接字senSo.Close();if(m_dwFileSize = dwCount)AfxMessageBox(_T(文件发送成功);elseAfxMessageBox(_T(文件发送失败);m_ctrlProgress.SetPos(0);GetDlgItem(IDC_DISCONNECT)-EnableWindow(TRUE);GetDlgItem(IDC_SELECT_FILE)-EnableWindow(TRUE);GetDlgItem(IDC_STOP_TRANSFERS)-EnableWindow(FALSE);m_bIsTransmitting = FALSE; 文件接收函数ReceiveFile,该函数在文件接收线程中被调用,其代码如下:void CFileTransfersDlg:ReceiveFile(CSocket &recSo)/停止等待超时计时器 KillTimer(2);m_bIsWait = FALSE;m_bIsTransmitting = TRUE;m_ctrlProgress.SetRange32(0, m_dwFileSize);GetDlgItem(IDC_DISCONNECT)-EnableWindow(FALSE);GetDlgItem(IDC_SELECT_FILE)-EnableWindow(FALSE);GetDlgItem(IDC_STOP_TRANSFERS)-EnableWindow(TRUE);int nSize = 0;DWORD dwCount = 0;char bufBLOCKSIZE = 0;/创建一个文件 CFile file(m_strPath, CFile:modeCreate|CFile:modeWrite);/开始接收文件 for(;)/每次接收BLOCKSIZE大小的文件内容 nSize = recSo.Receive(buf, BLOCKSIZE);if(nSize = 0)break;/将接收到的文件写到新建的文件中去 file.Write(buf, nSize);dwCount += nSize;m_ctrlProgress.SetPos(dwCount);CString strTransfersSize;strTransfersSize.Format(%ld 字节, dwCount);GetDlgItem(IDC_RECEIVE_SIZE)-SetWindowText(strTransfersSize); /用户是否要停止接收if(m_bIsStop)m_bIsStop = FALSE;break; /关闭文件file.Close(); /关闭套接字recSo.Close();if(m_dwFileSize = dwCount)AfxMessageBox(_T(文件接收成功);elseAfxMessageBox(_T(文件接收失败);m_ctrlProgress.SetPos(0);GetDlgItem(IDC_DISCONNECT)-EnableWindow(TRUE);GetDlgItem(IDC_SELECT_FILE)-EnableWindow(TRUE);GetDlgItem(IDC_STOP_TRANSFERS)-EnableWindow(FALSE);m_bIsTransmitting = FALSE;6 结论6.1 自我评价或总结 这次作业让我把Socket编程用到了实处

温馨提示

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

评论

0/150

提交评论