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

上传人:b****1 文档编号:3009275 上传时间:2023-05-01 格式:DOCX 页数:15 大小:230.46KB
下载 相关 举报
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第1页
第1页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第2页
第2页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第3页
第3页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第4页
第4页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第5页
第5页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第6页
第6页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第7页
第7页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第8页
第8页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第9页
第9页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第10页
第10页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第11页
第11页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第12页
第12页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第13页
第13页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第14页
第14页 / 共15页
中南大学计算机网络课程设计文件传输程序要点Word格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《中南大学计算机网络课程设计文件传输程序要点Word格式.docx》由会员分享,可在线阅读,更多相关《中南大学计算机网络课程设计文件传输程序要点Word格式.docx(15页珍藏版)》请在冰点文库上搜索。

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

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。

Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:

TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);

UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公司的QQ协议等)。

二、Winsock控件通信的工作原理

Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。

如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:

呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。

因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。

其大致流程如图1所示:

图1Winsock工作原理

端口号被规定在0~65535范围内的某一个整数,其中0~1023被预先定义的服务器通信所占用(如telnet占用23,http占用端口80),所以最好使用1024~65535这些端口中的某一个,以免发生端口冲突。

三、基本方法

客户端要与服务器端进行通信,首先,必须知道服务器端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码;

其次,还必须和服务器端约定相同的端口(RemotePort属性),用于数据的输入和输出;

最后,调用Connect方法与服务器端建立连接。

服务器端应设置一个监听端口(LocalPort属性),端口应与客户端的端口相同,同时调用Listen方法时刻监听客户端的连接请求(ConnectionRequest事件);

当接收到客户端的连接请求时,可调用ConnectionRequest事件的Accept方法,这样与客户端的连接就建立了。

客户端和服务器端成功建立连接后,任何一方都可以自由的发送数据(SendData方法)和接收数据(GetData方法),这些方法都在DataArrival事件中。

3.3编程实现过程

3.3.1开发环境

操作系统:

Windows7旗舰版

开发语言:

C++/MFC

编译环境:

MSVisualC++6.0

3.3.2程序界面设计

此程序根据功能需求,分别设计了客户端(图3-3-2-1)和服务器端(图3-3-2-2),实例如下:

图3-3-2-1

图3-3-2-2

3.3.3关键模块分析

1.文件选取

voidCTCPClientDlg:

:

OnSelect()

{

inti;

CFileMyFile;

CStringstrlen;

CFileDialogFileDlg(TRUE,NULL,NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,

"

AllFiles(*.*)|*.*||"

NULL);

if(FileDlg.DoModal()==IDOK)

{

m_FilePath=FileDlg.GetPathName();

GetDlgItem(IDC_FLIENAME)->

SetWindowText(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("

%ubytes"

m_FileLen);

GetDlgItem(IDC_STATIC_LEN)->

SetWindowText(strlen);

MyFile.Close();

}

//MyFile.Open(m_FilePath,CFile:

//UpdateData(FALSE);

}

2.文件发送

UINTSendTread(LPVOIDlpParam)

intiRxNum=0,iTxNum=0;

//每次接受,发送,读取文件的字符数

UINTiTotal=0;

//已发送文件长度

CStringTempName,str;

CTCPClientDlg*m_pDlg=(CTCPClientDlg*)lpParam;

CProgressCtrl*m_ProgressCtrl1=&

(m_pDlg->

m_ProgressCtrl);

ClientSocket*pSocket=m_pDlg->

m_pMySocket;

memset(sendbuf1,0,M);

//发送文件大小以及名字

sendbuf1[0]=m_FileLen/1000000000+48;

sendbuf1[1]=m_FileLen%1000000000/100000000+48;

sendbuf1[2]=m_FileLen%100000000/10000000+48;

sendbuf1[3]=m_FileLen%10000000/1000000+48;

sendbuf1[4]=m_FileLen%1000000/100000+48;

sendbuf1[5]=m_FileLen%100000/10000+48;

sendbuf1[6]=m_FileLen%10000/1000+48;

sendbuf1[7]=m_FileLen%1000/100+48;

sendbuf1[8]=m_FileLen%100/10+48;

sendbuf1[9]=m_FileLen%10+48;

a=strlen(m_FilePath);

sendbuf1[10]=a/1000+48;

sendbuf1[11]=a%1000/100+48;

sendbuf1[12]=a%100/10+48;

sendbuf1[13]=a%10+48;

if((N-10-4-a)>

=m_FileLen)

times=1;

else

times=1+(m_FileLen-(N-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)

{memset(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_buf[0]!

='

K'

m_ProgressCtrl1->

StepIt();

MyFile.Close();

str.Format("

文件传送完毕,断开连接!

"

m_pDlg->

}

{

memset(SendBuff,0,sizeof(SendBuff));

full_times=times-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-4-a)-N*full_times,0);

str.Format("

break;

}

if(Times>

0)

memset(rx_buf,0,4);

MyFile.Read(SendBuff,N);

Send(SendBuff,N,0);

}

}//对应while

return0;

 

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-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2