(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验

上传人:繁星 文档编号:88147836 上传时间:2019-04-20 格式:PPT 页数:27 大小:1.70MB
返回 下载 相关 举报
(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验_第1页
第1页 / 共27页
(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验_第2页
第2页 / 共27页
(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验_第3页
第3页 / 共27页
(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验_第4页
第4页 / 共27页
(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验》由会员分享,可在线阅读,更多相关《(网络空间安全技术实践)9.4casyncsocket下基于tcp协议的通信编程实验(27页珍藏版)》请在金锄头文库上搜索。

1、网络空间安全技术实践教程,吕秋云,王小军,胡耿然,汪云路,王秋华 西安电子科技大学出版社,第三篇 网络安全理论与技术实验篇,第九章 网络通信编程实验 9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,2,9.4 CAsyncSocket下基于TCP协议的通信编程实验,实验目的: 本实验要求掌握基于TCP协议的CAsyncSocket编程的基本原理和方法,并通过自己编程实现简单的流套接字的C/S模型。,网络空间安全技术实践教程,3,9.4 CAsyncSocket下基于TCP协议的通信编程实验,实验内容: 本次实验要求在理解基于流套接字(TCP协议)的编程

2、时序的基础上,利用VS2010及以上环境下的CAsyncSocket来实现简单的网络通信系统,即设计实现一个含有接收和发送功能的简易通信软件。,网络空间安全技术实践教程,4,9.4 CAsyncSocket下基于TCP协议的通信编程实验,实验要点说明:(实验难点说明) 理解TCP协议网络通信时序 建立简易通信程序(包括客户端和服务端功能),网络空间安全技术实践教程,5,9.4 CAsyncSocket下基于TCP协议的通信编程实验,实验准备:(实验环境,实验先有知识技术说明) 操作系统windows XP及以上 VS2010 以上开发环境,网络空间安全技术实践教程,6,实验步骤: 1)理解流套

3、接字编程时序 流套接字的编程时序图请参看9.1节的图9-1-1。,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,7,实验步骤: 2)简易通信程序设计 (1)新建工程 打开一个VS2010,建立一个新的MFC工程。需要注意的有两点:首先,在应用类型界面需要选择基于对话框的应用,如图9-4-1所示;其次,在高级选项界面要勾选“Windows Socket”,如图9-4-2所示,这样在之后的Socket编程工作中,用到相关头文件以及链接库等开发环境时就不再需要手工添加了。 建立成功后,进入Class View,如图9-4-3所示,可在主界面中根据功能设计好

4、主对话框,如图9-4-4所示。需要说明的是,该程序运行后,用户就会看到界面显示的主对话框,如果关闭该对话框,程序运行进程就终止了。,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,8,实验步骤: 2)简易通信程序设计 (2)为控件添加变量 右键点击对话框,弹出菜单,如图9-4-5所示。选择Class Wizard,弹出对话框,如果添加变量,先点击选择一个控件ID,然后点击右边的“Add Variable”,输入变量名,并且选择变量类型,添加好变量后如图9-4-6所示。程序代码可以通过操作变量名来操作控件,方便编程。,9.4 CAsyncSocket下基

5、于TCP协议的通信编程实验,网络空间安全技术实践教程,9,实验步骤: 2)简易通信程序设计 (3)实现发送数据功能 双击图9-4-4中的“Send”按钮,即会自动产生一个类成员函数,进入代码编辑页面,添加代码具体如下: void CCChenSiCAsyncSocketDlg:OnBnClickedButton2() / TODO: Add your control notification handler code here UpdateData(TRUE);/把界面上的值赋值给相应的控件变量 BYTE addr4;/定义一个数组,用来存储IP值4个字段 m_ipaddress.GetAdd

6、ress(addr0, addr1, addr2, addr3);/把IP值4个字段存储到数组当中 CString ipaddr; ipaddr.Format(“%d.%d.%d.%d“,addr0, addr1, addr2, addr3);/得到IP的CString值,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,10,实验步骤: 2)简易通信程序设计 (3)实现发送数据功能 CAsyncSocket sendsocket;/定义一个套接字,用来发送数据 sendsocket.Create(0, SOCK_STREAM, FD_WRITE);/初

7、始化,包含了定义和绑定,SOCK_STREAM表示使用TCP协议,FD_WRITE表示感兴趣的事件是网络可写 sendsocket.Connect(ipaddr, m_rport);/发起连接 sendsocket.Send(m_sendstr, m_sendstr.GetLength();/发送数据 sendsocket.Close();/关闭套接字 /这里省去了连接失败的处理,可以自己添加上去,网络好的情况下一般不会出现连接失败 ,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,11,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 为了实

8、现信息的接收,程序需要创建监听和接收信息的CAsyncSocket类,故需要申明两个Socket。因此,在Class View中的CChenSiCAsyncSocket上点击右键调出菜单来(如图9-4-7),选择Add - Class.打开添加类的窗口,选择MFC Class,如图9-4-8所示。 在添加类向导中进行进一步设置,Class name取名为CListenSocket,Base class选择CAsyncSocket,点击Finish,如图9-4-9所示。并且如法炮制,再建立一个CRecvSocket,如图9-4-10所示。,9.4 CAsyncSocket下基于TCP协议的通信编

9、程实验,网络空间安全技术实践教程,12,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 Socket创建成功后,在ClassView中找到刚才所建的新类CListenSocket,右键调出菜单点击Class Wizard.,进入向导后找到Virtual Functions添加OnAccept(int nErrorCode)函数,如图9-4-11所示。双击Class View界面中的OnAccept(int nErrorCode)进入代码编辑页面后添加如下代码: void CListenSocket:OnAccept(int nErrorCode) / TODO: Add your s

10、pecialized code here and/or call the base class CRecvSocket *recvsocket; recvsocket = new CRecvSocket();/新定义一个用来接收的套接字,用new来创建对象位于堆内存,要手动析构,考虑到这个接收套接字的生命周期,所以用new Accept(*recvsocket);/接收连接 recvsocket-AsyncSelect(FD_READ);/设置感兴趣的网络事件,这里FD_READ表示对缓冲区有数据感兴趣 CAsyncSocket:OnAccept(nErrorCode); ,9.4 CAsyn

11、cSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,13,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 注意:代码中有用到CRecvSocket类的对象,所以要包含它的头文件,在头部添加一句#include “RecvSocket.h“即可。 监听功能完成后,要进行接收信息功能的实现,按照对CListenSocket创建新函数的方法,选择CRecvSocket,右键调出菜单点击Class Wizard.,进入类向导,添加OnReceive(int nErrorCode)函数,如图9-4-12所示。,9.4 CAsyncSocket下基于TCP协议的通信编程实验,

12、网络空间安全技术实践教程,14,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 双击Class View界面中的OnReceive(int nErrorCode)进入代码编辑页面后添加如下代码: void CRecvSocket:OnReceive(int nErrorCode) / TODO: Add your specialized code here and/or call the base class char buf1024;/定义一个数组用来存储缓冲接收到的数据 memset(buf, 0, 1024);/全部填充为0 Receive(buf, 1024);/接收数据 C

13、String recvstr; recvstr.Format(“%s“, buf);/构造一个CString字符串 (CCChenSiCAsyncSocketDlg *)AfxGetMainWnd()-m_allstr.AddString(recvstr);/添加到界面上 CAsyncSocket:OnReceive(nErrorCode); ,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,15,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 注意:代码中用到了一个强制类型转换,所以要添加CCChenSiCAsyncSocketDlg的头文

14、件,#include “CChenSiCAsyncSocketDlg.h“。 接着要为CCChenSiCAsyncSocketDlg类添加一个成员函数InitSock,右键选择Class View中的CCChenSiCAsyncSocketDlg类,弹出菜单,如图9-4-13所示。 选择“Add Function.”,弹出对话框,输入函数名SockInit,选择返回值void,点击确定后,即可成功创建函数,如图9-4-14所示。,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,16,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 成功创建成员

15、函数后,即可添加函数代码,代码如下: void CCChenSiCAsyncSocketDlg:InitSock(void) CListenSocket *listensocket; listensocket = new CListenSocket();/定义一个监听的套接字 if(!listensocket-Create(m_lport, SOCK_STREAM, FD_ACCEPT)/初始化操作 SetDlgItemText(IDC_STATIC,“bind failed!“);/设置提示框文字 return ; else SetDlgItemText(IDC_STATIC,“bind s

16、ucceed!“); listensocket-Listen(10);/开始监听 ,9.4 CAsyncSocket下基于TCP协议的通信编程实验,网络空间安全技术实践教程,17,实验步骤: 2)简易通信程序设计 (4)实现接收数据功能 双击“Bind”按钮,生成函数,编辑代码,如下: void CCChenSiCAsyncSocketDlg:OnBnClickedButton1() / TODO: Add your control notification handler code here UpdateData(TRUE); InitSock(); 同时也可在CCChenSiCAsyncSocketDlg:OnInitDialog函数中找到“/TODO: Add extra initialization here”,在后面添加代码如下: m_ipaddress.SetAddress(127,0,0,1); InitSoc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号