(网络空间安全技术实践)9.3csocket下基于udp协议的通信编程实验

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

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

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

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

3、序。基于数据报套接字(UDP协议)的网络通信时序如图9-3-1所示。与图9-1-1描述的流套接字不同,服务器和客户端程序的数据报套接字的编程时序是完全一样的。程序首先需要初始化SOCKET,接着绑定端口,然后进行收发信息的操作。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,7,实验步骤: 2)简易聊天程序设计 (1)新建工程 打开一个VS2010,建立一个新的MFC工程。需要注意的有两点:首先,在应用类型界面需要选择基于对话框的应用,如图9-3-2所示;其次,在高级选项界面要勾选“Windows Socket”,如图9-3-3所示,这样在之后的Socket编

4、程工作中,用到相关头文件以及链接库等开发环境时就不再需要手工添加了。 建立成功后,进入Class View,如图9-3-4所示,可在主界面中根据功能设计好主对话框,如图9-3-5所示。需要说明的是,该程序运行后,用户就会看到界面显示的主对话框,如果关闭该对话框,程序运行进程就终止了。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,8,实验步骤: 2)简易聊天程序设计 (2)为控件添加变量 右键点击对话框,弹出菜单,如图9-3-6所示。选择Class Wizard,弹出对话框,如果添加变量,先点击选择一个控件ID,然后点击右边的“Add Variable”,输入

5、变量名,并且选择变量类型,添加好变量后如图9-3-7所示。程序代码可以通过操作变量名来操作控件,方便编程。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,9,实验步骤: 2)简易聊天程序设计 (3)编写发送功能代码 双击图9-3-5中的“发送”按钮,产生一个发送的函数,进入代码编辑页面,添加代码如下: void CCChenSiCSocketDlg:OnBnClickedButton2() / TODO: Add your control notification handler code here UpdateData(TRUE);/创建一个用来发送的soc

6、ket CSocket sendsocket;/初始化 sendsocket.Create(0, SOCK_DGRAM, NULL); sendsocket.SendTo(m_sendcontent, m_sendcontent.GetLength(), m_remoteport, m_ipaddress, 0); /直接发送,不需要连接 sendsocket.Close();/关闭socket ,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,10,实验步骤: 2)简易聊天程序设计 (4)编写接收功能代码 为了实现信息的接收,程序需要接收信息的Socket,故

7、需要申明一个Socket。因此,在Class View中的CChenSiCSocket上点击右键调出菜单来(如图9-3-8),选择Add - Class.打开添加类的窗口,选择MFC Class,如图9-3-9所示。 在添加类向导中进行进一步设置,Class name取名为CRecvSocket,Base class选择CSocket,点击Finish,如图9-3-10所示。 接收Socket创建成功后,在ClassView中找到刚才所建的新类CRecvSocket,右键调出菜单点击Class Wizard.,进入向导后找到Virtual Functions添加OnReceive(int nE

8、rrorCode)函数,如图9-3-11所示。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,11,实验步骤: 2)简易聊天程序设计 (4)编写接收功能代码 双击Class View界面中的OnReceive(int nErrorCode)进入代码编辑页面,找到“/ TODO: Add your specialized code here and/or call the base class”后添加如下代码: void CRecvSocket:OnReceive(int nErrorCode) / TODO: Add your specialized code

9、 here and/or call the base class char buf1024; memset(buf, 0, 1024); ReceiveFrom(buf, 1024, NULL, NULL, 0); CString c; c.Format(“%s“, buf); SendMessage(AfxGetMainWnd()-m_hWnd, MYMSG, 0, (long) ,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,12,实验步骤: 2)简易聊天程序设计 (4)编写接收功能代码 代码中有发送消息函数SendMessage,参数中有MYMSG,这是

10、个宏定义,我们在“RecvSocket.cpp”文件最顶部添加一句:#define MYMSG WM_USER+1,作用是定义一个自定义消息号,防止和系统消息混淆。 自定义消息发送出去后要在窗口中处理,于是还需在CCChenSiCSockDlg类中添加一个自定义消息处理函数,添加方法如下: 双击Class View中的CCChenSiCSockDlg类名,进入类的头文件CChenSiCSocketDlg.h,在头文件中添加自定义消息处理函数申明,位置如图9-3-12所示。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,13,实验步骤: 2)简易聊天程序设计 (

11、4)编写接收功能代码 图9-3-12中选中的函数名MyMessageDeal可以随意取,但是参数和前缀不能变,前缀是afx_msg LRESULT。添加了函数申明以后,还需要进入CChenSiCSocketDlg.cpp文件,添加一个消息映射,位置如图9-3-13所示。消息映射申明的形式如:ON_MESSAGE(消息号,自定义消息处理函数)。 接下来需要在CChenSiCSocketDlg.cpp文件中实现函数的功能代码,参照其他函数形式,手动添加函数,具体代码如下: LRESULT CCChenSiCSocketDlg:MyMessageDeal(WPARAM wParam, LPARAM

12、lParam) /处理自定义消息 m_allcontent = m_allcontent + “rn“ + *(CString *)lParam; UpdateData(FALSE); return 0; ,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,14,实验步骤: 2)简易聊天程序设计 (4)编写接收功能代码 到目前为止仅仅定义了派生类,还没有用到这个派生类的对象。要使用这个派生类的对象接收到数据,首先需要绑定一个端口,所以,需要双击绑定按钮,添加一个绑定函数,具体代码如下: void CCChenSiCSocketDlg:OnBnClickedButt

13、on1() / TODO: Add your control notification handler code here CRecvSocket *recvsocket; UpdateData(TRUE); recvsocket = new CRecvSocket();/创建一个socket if(!recvsocket-Create(m_localport, SOCK_DGRAM, NULL)/初始化绑定 SetDlgItemText(IDC_STATIC, “绑定失败“); else SetDlgItemText(IDC_STATIC, “绑定成功“); ,9.3 CSOCKET下基于U

14、DP协议的通信编程实验,网络空间安全技术实践教程,15,实验步骤: 2)简易聊天程序设计 (5)编译程序 编写完成后,需要对代码进行编译,可以通过菜单或者工具栏按钮完成操作。 如果使用菜单,可以选择Build - Build CChenSiCSocket 或者Build - Build Solution,如图9-3-14所示。 如果使用工具栏,可以选择如图9-3-15所示的按钮。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,16,实验步骤: 2)简易聊天程序设计 (5)编译程序 如果编译完全成功,确保无语法错误时,会在Output中显示“Build: 1 s

15、ucceed, 0 failed.”,如图9-3-16所示;如果编译存在错误,会显示在Error List中,如图9-3-17所示,编译器提示发生了很多编译错误,经查证,是因为没有在CChenSiCSocketDlg.cpp中引用CRecvSocket所需要的头文件,即#include “RecvSocket.h“,增加后即可编译成功。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,17,实验步骤: 3)运行程序实现简易通信 编译成功后,可以通过菜单或者工具栏按钮来运行完成的程序。在编译成功的前提下,如果使用菜单,其中一种方法是选择Debug - Start

16、Debugging,如图9-3-18所示;如果使用工具栏,可以选择如图9-3-19所示的按钮。 正常运行时,会显示MFC项目中所设计的主对话框,然后依据所编写的程序进行操作,完成需要的功能。由于本实验中的应用程序同时包含服务器和客户端程序的功能,所以需要同时运行两个程序,一个作为通信者Alice,一个作为通信者Bob,如图9-3-20所示。,9.3 CSOCKET下基于UDP协议的通信编程实验,网络空间安全技术实践教程,18,实验步骤: 3)运行程序实现简易通信 由于该程序中既包括服务器端功能又包括客户端功能,同时还在同一机器上运行,所以两个程序中对方IP可直接填“127.0.0.1”。 在运行时,首先用户作为Alice,使用图9-3-20中右边的聊天程序,要选定一个能够接收信息的本地端口进行绑定,所以先输入本地端口(例如:9999),点击绑定;在看到绑定成功的提示后,用户接着作为Bob,在左边的聊天程序中左下角的编辑框里输入想要发送的信息(例如:Hello,Alice!),并在对方端口一栏中输入Alice所绑定的

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

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

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