socket网络编程大作业_第1页
socket网络编程大作业_第2页
socket网络编程大作业_第3页
socket网络编程大作业_第4页
socket网络编程大作业_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

网络编程技术网络编程技术 大作业大作业 项目开 发人 杨腾飞 开发人 班级 20102 开发人 学号 2010082225 开发人专 业 软件工 程 项目名 称 MFC 实现局域网内点对点的文件传输 成绩 (70%) 修 改 履 历 修改编号 日期 修改人 版本号 修改内容 1 2013.5.24 杨腾飞 1.0 编写需求分析 2 2013.5.25 杨腾飞 1.1 修改模块接口设计 3 2013.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 体 系结构如图一所示: 网络编程技术大作业 版本:0.1.0 第 3 页 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 文档概述 .5 1.1 文档目的和范围 .5 1.2 术语/缩略语 5 1.3 参考文档 .5 2 系统概述 .5 2.1 项目说明 .5 2.2 需求分析 .5 2.3 可行性或难点分析 .6 3 通信协议设计 .6 3.1 通信流程 .6 3.2 数据格式 .6 3.3 会话举例 .6 4 系统设计说明 .6 4.1 模块整体结构图 .6 4.2 使用说明书 .6 5 模块详细说明 .6 5.1 核心通信模块 .7 5.1.1 socket 函数的功能 7 5.1.2 通信时序图 .7 5.2 用户接口模块 .7 5.3 类/接口/函数说明 .7 6 结论 .7 6.1 自我评价或总结 .7 6.2 需要进一步学习的内容 .7 6.3 系统扩展计划 .7 网络编程技术大作业 版本:0.1.0 第 5 页 1 文档概述 1.1 文档目的和范围 明确任务和需求,使得软件开发人员知道软件开发流程,软件测试时更有条理。 1.2 术语 /缩略语 序号 术语/缩略语 说明 1 API 应用程序编程接口 2 Socket 网络套接口 3 IP IP 是英文 Internet Protocol(网络之间互联的协议)的缩写 4 Client/Server 客户机/服务器模式 5 Winsock Windows 下网络编程的规范 1.3 参考文档 序号 文档名 作者 时间 版本 1 Windows 网络编程 罗莉琴 詹祖桥 2011 年 4 月 第 1 版 2 系统概述 2.1 项目说明 本软件是把客户端和服务器集为一体,通过 tcp 协议,实现可靠的文件传输功能。 运行环境:win7 2.2 需求分析 该程序实现局域网内的文件传输功能,包括服务器端程序和客户端程序两部分。 客户端程序:可连接到服务器,并将文件发送到服务器端和接受服务器端发送来的文件。 服务器端程序:负责相应客户端的消息和接收客户端发送来的文件。 2.3 可行性或难点分析 本软件的难点在于进行文件传输时只能传送较小的文件,对于大文件的传输还有部分 问题尚待解决。此外,传输文件时的效率较低,程序容易出现假死现象,所以考虑到如果使 用多线程应该能提高效率,但是基于自身能力和时间问题,这部分优化没有做,只是完成了 基本的文件传输功能。 网络编程技术大作业 版本:0.1.0 第 7 页 3 通信协议设计 3.1 通信流程 3.2 会话举例 1.选择服务器端的话会自动获取本机 IP,可以自定义端口号。然后点击“启动”按钮,可以开启服务器监 听有无客户端连接。 2.选择客户端可以自己输入要连接的服务器的 IP 地址和端口号。点击“连接”按钮,可以连接到服务器, 然后“选择文件”按钮才可以被点击。 3.服务器和客户端连接后的状态如下所示: 网络编程技术大作业 版本:0.1.0 第 9 页 4.选择一个文件后点击发送,文件接收成功后会出现提示框。 4 系统设计说明 4.1 模块整体结构图 4.2 使用说明书 程序使用 MFC 做的界面,所以操作简单,直接用鼠标点击相应按钮即可。 5 模块详细说明 5.1 核心通信模块 该函数主要用于处理文件传输的控制消息。 发送文件函数 SendFile,该函数在发送文件线程被调用,其代 码如下: void CFileTransfersDlg:SendFile(CSocket /打开要发送的文件 网络编程技术大作业 版本:0.1.0 第 11 页 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(“文件发送成功“); else AfxMessageBox(_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 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; 网络编程技术大作业 版本:0.1.0 第 13 页 /创建一个文件 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(“文件接收成功“); else AfxMessageBox(_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 自我评价或总结 这次作业

温馨提示

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

评论

0/150

提交评论