ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:230.78KB ,
资源ID:19720101      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19720101.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学计算机网络课程设计 文件传输程序要点文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中南大学计算机网络课程设计 文件传输程序要点文档格式.docx

1、Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公司的QQ协议等)。二、Winsock控件通信的工作原理 Winsock控件是基于Socket规范创

2、建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器” 正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。其大致流程如图1所示: 图1 Winsock工作原理 端口号被规定在065535范围内的某一个整数,其中01023被预

3、先定义的服务器通信所占用(如telnet占用23,http占用端口80),所以最好使用102465535这些端口中的某一个,以免发生端口冲突。三、基本方法 客户端要与服务器端进行通信,首先,必须知道服务器端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码;其次,还必须和服务器端约定相同的端口(RemotePort属性),用于数据的输入和输出;最后,调用Connect方法与服务器端建立连接。 服务器端应设置一个监听端口(LocalPort属性),端口应与客户端的端口相同,同时调用Listen方法时刻监听客户端的连接请求(ConnectionRequest

4、事件);当接收到客户端的连接请求时,可调用ConnectionRequest事件的Accept方法,这样与客户端的连接就建立了。 客户端和服务器端成功建立连接后,任何一方都可以自由的发送数据(SendData方法)和接收数据(GetData方法),这些方法都在DataArrival事件中。3.3编程实现过程 3.3.1 开发环境 操作系统:Windows 7旗舰版开发语言:C+ / MFC编译环境:MS Visual C+6.0 3.3.2 程序界面设计此程序根据功能需求,分别设计了客户端(图3-3-2-1)和服务器端(图3-3-2-2),实例如下:图3-3-2-1图3-3-2-2 3.3.3

5、 关键模块分析1.文件选取void CTCPClientDlg:OnSelect() int i; CFile MyFile; CString strlen; CFileDialog FileDlg(TRUE,NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, All Files (*.*)|*.*|,NULL); if(FileDlg.DoModal() = IDOK) m_FilePath = FileDlg.GetPathName(); GetDlgItem(IDC_FLIENAME)-SetWi

6、ndowText(m_FilePath); i = m_FilePath.ReverseFind(); m_FileName = m_FilePath.Mid(i + 1); /m_FileName = FileDlg.GetFileTitle(); MyFile.Open(m_FilePath,CFile:modeRead); m_FileLen = MyFile.GetLength(); strlen.Format(%u bytes,m_FileLen); GetDlgItem(IDC_STATIC_LEN)-SetWindowText(strlen); MyFile.Close(); /

7、MyFile.Open(m_FilePath,CFile: /UpdateData(FALSE);2.文件发送UINT SendTread(LPVOID lpParam) int iRxNum=0,iTxNum=0; /每次接受,发送,读取文件的字符数 UINT iTotal = 0; /已发送文件长度 CString TempName,str; CTCPClientDlg* m_pDlg=(CTCPClientDlg*)lpParam; CProgressCtrl* m_ProgressCtrl1=&(m_pDlg-m_ProgressCtrl); ClientSocket* pSocket

8、 = m_pDlg-m_pMySocket; memset(sendbuf1,0,M); /发送文件大小以及名字 sendbuf10=m_FileLen/1000000000+48; sendbuf11=m_FileLen%1000000000/100000000+48; sendbuf12=m_FileLen%100000000/10000000+48; sendbuf13=m_FileLen%10000000/1000000+48; sendbuf14=m_FileLen%1000000/100000+48; sendbuf15=m_FileLen%100000/10000+48; sen

9、dbuf16=m_FileLen%10000/1000+48; sendbuf17=m_FileLen%1000/100+48; sendbuf18=m_FileLen%100/10+48; sendbuf19=m_FileLen%10+48; a=strlen(m_FilePath); sendbuf110=a/1000+48; sendbuf111=a%1000/100+48; sendbuf112=a%100/10+48; sendbuf113=a%10+48; if(N-10-4-a)=m_FileLen) times=1; else times=1+(m_FileLen-(N-10-

10、4-a)/N+1;/表示最少两次,第一次和最后一次 /进度条初始化 m_ProgressCtrl1-SetRange(0,times-1) ;SetPos(0) ;SetStep(1); strcat(sendbuf1,(char*)m_FilePath.GetBuffer(m_FileLen); pSocket-Send(sendbuf1,10+4+a,0); /m_ProgressCtrl; /开始传输文件数据 str.Format(开始传送文件. m_pDlg-UpdateMGData(str); MyFile.Open(m_FilePath,CFile: if(times=1) mem

11、set(rx_buf,0,4); memset(SendBuff,0,sizeof(SendBuff); MyFile.Read(SendBuff,m_FileLen); iTxNum = pSocket-Send(SendBuff,m_FileLen,0); pSocket-Receive(rx_buf,4,0); while(rx_buf0!=K) m_ProgressCtrl1-StepIt(); MyFile.Close(); str.Format(文件传送完毕,断开连接! m_pDlg- memset(SendBuff,0,sizeof(SendBuff); full_times=t

12、imes-2; Times=times; Times=Times-1; MyFile.Read(SendBuff,N-10-4-a); iTxNum = pSocket-Send(SendBuff,N-10-4-a,0); while(Times-) if(Times=0) memset(rx_buf,0,4); memset(SendBuff,0,sizeof(SendBuff); MyFile.Read(SendBuff,m_FileLen-(N-10-4-a)-N*full_times); pSocket-/如果收到K,则完成 Send(SendBuff,m_FileLen-(N-10-

13、4-a)-N*full_times,0); str.Format( break; if(Times0) memset(rx_buf,0,4); MyFile.Read(SendBuff,N);Send(SendBuff,N,0); /对应while return 0;3.3.4 结果演示与分析图3-3-4-1图3-3-4-2图3-3-4-3图3-3-4-4图3-3-4-5图3-3-4-6图3-3-4-7图3-3-4-8图3-3-4-9图3-3-4-10图3-3-4-11图1、图2分别为客户端和服务器端初始状态,图3客户端连接服务器端,图4服务器端侦听,客户端与服务器端连接成功,图5客户端选取文件,图6客户端发送文件,图7服务器端接受保存文件,图8客户端文件发送完毕,断开连接,图9服务器端接收成功,图10客户端断开与服务器端连接,图11服务器端停止侦听。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1