当前位置:文档之家› 网络协议编程课程设计

网络协议编程课程设计

HUNAN CITY UNIVERSITY

网络协议编程课程设计

说明书

设计题目:基于MFC框架的Echo协议模拟软件的设计与实现

专业:网络工程

学生姓名:*****

班级学号:1206101-28

分组成员: 1206101-05 *****、1206101-31******

1206101-28何***

指导教师: ****老师 *****老师

2015 年 07月 03日

《网络协议编程课程设计》说明书

学号:1206101-28姓名:****

一、设计时间

2015年06月29日-----07月03日。

二、设计地点

湖南城市学院信息楼507机房。

三、设计目的

1、巩固《网络协议编程》课程涉及的基本知识,培养灵活运用知识进行独立设计的能力;

2、掌握TCP/IP网络程序框架、Winsock API、高级网络编程API的使用;

3、提高综合运用所学的理论知识独立分析和解决问题的能力;

4、进一步熟悉利用Visual C++6.0进行开发的能力;

5、培养查阅资料,独立思考问题的能力。

四、设计小组成员

1206101-05**** 1206101-31**** 1206101-28****

五、指导老师

****老师、****老师。

六、设计课题

经过小组组员的讨论,决定选取选题(18 基于MFC框架的Echo协议模拟软件的设计与实现),编写一个基于MFC框架的Echo协议模拟软件。

理由:

1、Echo协议(也称回声协议)是一个非常简单的协议,它主要用于网络可达性的检测中。

2、该系统功能相对简单,易于实现,适于初学者。

3、该系统牵涉到TCP协议、CAsysncSocket类、C/S模式以及MFC框架,采用VC6.0编制程序模拟Echo协议的基本功能,需要灵活运用这些知识解决实际问题,有利于培养网络系统开发的实际动手能力。

七、基本思路及关键问题的解决方法

本系统的开发采用基于MFC的Echo协议的C/S模式,服务器在端口7检测接收到的信息,如果收到信息,则原封不动地重发回客户端。根据C/S模式的特点,使用TCP协议、CAsysncSocket类、C/S模式以及MFC框架,采用VC6.0编制程序模拟Echo协议的基本功能。

设计为了方便,利用VC++自动生成的对话框来进行删除和修改,并且利用图形用户界面来添加相应的相应按钮。

八、算法及流程图

九、程序运行:

服务器初始界面:

客户端初始界面:

开始

初始化

加载

CAsyncSocket类

结束

连接失败接收数据

建立连接

N

响应函数OnTimer()

客户端流程图

Y

关闭

服务器开始侦听,客户端点击连接:

弹出如下对话框,输入相应信息:客户端点击确定后服务器弹出如下提示框:

在信息输入框输入信息:

点击发送:

发送成功并接收到了从服务器端返回的一样的信息。

十、调试过程中出现的问题及相应解决办法

1.调试过程中出现问题,一一对应检查,在经过对书上代码的对比后改正,最终成功编译并运行。

2.在连接时使用了不相同的端口号,导致建立不了连接,检查之后发现并改正过来。

3.在画流程图时,由于对代码的不熟悉,导致问题多多,经慢慢了解,初步得以解决。十一、课程设计心得体会

通过这次课程设计,让我更加深刻的了解了TCP这门课程编程方面的知识,和以往对知识的疏忽也得以补充,在设计过程中,我和小组另一位成员一起负责画流程图和基本思路方面,虽然遇到了一些问题,但经过我们几个同学的一次又一次的思考,一遍又一遍的检查终于找出了原因并及时改正,虽然我们在这方面的知识有所欠缺和不足,但是我觉得我收获了很多、学会了很多、也比以往更有耐心很多。

十二、源程序

服务器:

//侦听

void CCSockServerDlg::OnListen()

{

if(m_srvrSocket.m_hSocket==INVALID_SOCKET)

{

BOOL bFlag=m_srvrSocket.Create(7,SOCK_STREAM,FD_ACCEPT);

if(!bFlag)

{

AfxMessageBox("Socket Error!");

m_srvrSocket.Close();

PostQuitMessage(0);

return;

}

}

//"侦听"成功,等待连接请求

if(!m_srvrSocket.Listen(1))

{

int nErrorCode=m_srvrSocket.GetLastError();

if(nErrorCode!=WSAEWOULDBLOCK)

{

AfxMessageBox("Socket Error!");

m_srvrSocket.Close();

PostQuitMessage(0);

return;

}

}

客户端:

//连接

void CCSockClientDlg::OnConnect()

{

m_clientSocket.ShutDown(2);

m_clientSocket.m_hSocket=INVALID_SOCKET;

m_clientSocket.m_bConnected=FALSE;

CAddrDlg m_Dlg;

//默认端口7

m_Dlg.m_Port =7;

if(m_Dlg.DoModal()==IDOK && !m_Dlg.m_Addr.IsEmpty())

{

memset(m_szServerAdr,0,sizeof(m_szServerAdr));//汪彦老师添加 //memcpy(m_szServerAdr,m_Dlg.m_Addr,sizeof(m_Dlg.m_Addr));

memcpy(m_szServerAdr,m_Dlg.m_Addr,strlen(m_Dlg.m_Addr)+1);

m_szPort=m_Dlg.m_Port;

//建立计时器,每1s尝试连接一次,直到连上或TryCout>10

SetTimer(1,1000,NULL);

TryCount=0;

}

}

//发送

void CCSockClientDlg::OnSend()

{

// TODO: Add your control notification handler code here

if(m_clientSocket.m_bConnected)

{

m_clientSocket.m_nLength=m_MSG.GetWindowText(m_clientSocket.m_szBuffer,sizeof(m _clientSocket.m_szBuffer));

相关主题