版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三篇网络安全理论与技术实验篇第九章网络通信编程实验9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程19.1SOCKET下基于TCP协议的通信编程实验实验目的:本实验要求掌握基于TCP协议的SOCKETAPI编程的基本原理和方法,并通过自己编程实现简单的流套接字的C/S模型。网络空间安全技术实践教程29.1SOCKET下基于TCP协议的通信编程实验实验内容:
本次实验要求在理解基于流套接字(TCP协议)的编程时序的基础上,利用VS2010及以上环境下的SOCKETAPI来实现简单的网络通信系统,即设计实现一个简易通信软件系统,其中一个软件(客户端)实现发送信息功能,另一个软件(服务端)实现接收信息功能。网络空间安全技术实践教程39.1SOCKET下基于TCP协议的通信编程实验实验要点说明:(实验难点说明)理解TCP协议网络通信时序分别建立服务器端和客户端程序网络空间安全技术实践教程49.1SOCKET下基于TCP协议的通信编程实验实验准备:(实验环境,实验先有知识技术说明)操作系统windowsXP及以上VS2010以上开发环境网络空间安全技术实践教程5实验步骤:1)理解流套接字编程时序基于流套接字(TCP协议)的网络通信时序如图9-1-1所示。网络通信涉及到2个独立的应用程序,为了理解方便,我们建立2个不同的应用程序,一个是服务器程序(server)主要用于接收数据,如图9-1-1左边所示,服务器端程序主要完成网络监听,接收连接请求、接受信息,回送信息等;另一个是客户端程序(client),主要用于发送数据,如图9-1-1右边所示,客户端程序主要是请求连接,发送信息,接收信息。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程6实验步骤:2)服务器端程序编程步骤(1)新建服务器端工程打开一个VS2010,建立一个新的MFC工程Server。需要注意的有两点:首先,在应用类型界面需要选择基于对话框的应用,如图9-1-2所示;其次,在高级选项界面要勾选“WindowsSocket”,如图9-1-3所示,这样在之后的Socket编程工作中,用到相关头文件以及链接库等开发环境时就不再需要手工添加了。建立成功后,进入ClassView,如图9-1-4所示,可在主界面中根据功能设计好主对话框,如图9-1-5所示。需要说明的是,该程序运行后,用户就会看到界面显示的主对话框,如果关闭该对话框,程序运行进程就终止了。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程7实验步骤:2)服务器端程序编程步骤(2)为控件添加变量右键点击对话框,弹出菜单,如图9-1-6所示。选择ClassWizard,弹出对话框,如果添加变量,先点击选择一个控件ID,然后点击右边的“AddVariable”,输入变量名,并且选择变量类型,添加好变量后如图9-1-7所示。程序代码可以通过操作变量名来操作控件,方便编程。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程8实验步骤:2)服务器端程序编程步骤(3)实现接收数据功能由流套接字的时序图9-1-1中可知,服务器端程序需要监听和接收信息,故我们需要先绑定监听Socket端口。为了实现绑定端口的功能,我们添加一个函数SockInit,添加方法为右键CSocketAPIDlg类名,弹出菜单,如图9-1-8所示。选择“AddFunction...”,弹出对话框,输入函数名SockInit,选择返回值void,点击确定后,即可成功创建函数,如图9-1-9所示。成功创建成员函数后,即可添加函数代码,代码如下:9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程9voidCCChenSiSocketAPIServerDlg::SockInit(void){ UpdateData(TRUE);BYTEnFild[4]; CStringstr_new; CStringipstr; m_mylocalip.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]); ipstr.Format("%d.%d.%d.%d",nFild[0],nFild[1],nFild[2],nFild[3]);//得到IP地址的CString形式//以下是初始化一些地址和端口等参数 sockaddr_inmyaddr; myaddr.sin_family=AF_INET;//使用的协议簇 myaddr.sin_addr.S_un.S_addr=inet_addr(ipstr);//本机IP地址 myaddr.sin_port=htons(m_myport);//本机通信端口SOCKETserver=socket(AF_INET,SOCK_STREAM,0);//创建一个套接字,AF_INET为协议簇,//SOCK_STREAM表示使用TCP协议,0表示缺省。 bind(server,(sockaddr*)&myaddr,sizeof(myaddr));//将套接字绑定到一个本地地址和端口上(bind) listen(server,5);//将套接字设为监听模式,准备接收客户请求(listen)//以下为循环检查是否有客户端请求连接,并接收信息显示在界面上。 SOCKADDR_INaddrClient; intlen=sizeof(SOCKADDR);
9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程10 while(1)//在死循环中一直监听端口,进入通信状态 { SetDlgItemText(IDC_STATIC,"正在通信..."); SOCKETsockConn=accept(server,(sockaddr*)&addrClient,&len);//等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) charrecvBuf[256]; recv(sockConn,recvBuf,sizeof(recvBuf),0); str_new.Format("%s\r\n",recvBuf); if(str_new=="quitTCP\r\n") { //如果客户端发来了退出通信的“quitTCP”标志,则跳出循环结束通信 str_new="本次通信已结束\r\n\r\n"; str=str+str_new; m_display.SetWindowTextA(str); m_display.LineScroll(m_display.GetLineCount()); SetDlgItemText(IDC_STATIC,"通信结束"); break; } str=str+str_new; m_display.SetWindowTextA(str); m_display.LineScroll(m_display.GetLineCount()); closesocket(sockConn);//关闭套接字。等待另一个用户请求 } closesocket(server);}9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程11实验步骤:2)服务器端程序编程步骤(4)编译服务端程序编写完成后,需要对代码进行编译,可以通过菜单或者工具栏按钮完成操作。如果使用菜单,可以选择Build-BuildCChenSiSocketAPIServer或者Build-BuildSolution,如图9-1-10所示。如果使用工具栏,可以选择如图9-1-11所示的按钮。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程12实验步骤:2)服务器端程序编程步骤(4)编译服务端程序如果编译完全成功,确保无语法错误时,会在Output中显示“Build:1succeed,0failed...”,如图9-1-12所示;如果编译存在错误,会显示在ErrorList中,如图9-1-13所示,编译器提示,在CChenSiSocketAPIServerDlg文件的第200行,发生了C2065错误,变量str_nea从没有被声明就使用了。经查证,是因为把str_new错写为str_nea,改正后即可编译成功。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程13实验步骤:3)客户端程序编程步骤(1)新建客户端工程打开VS2010,建立一个新的MFC工程Client,同样应记得勾选基于对话框选项和“WindowsSocket”。建立成功后,为该对话框添加按钮、编辑控件和静态文本框控件,如图9-1-14所示。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程14实验步骤:3)客户端程序编程步骤(2)为控件添加变量按照服务器端中的设置方法为客户端对话框添加变量方法操作,添加好的变量如图如9-1-15所示。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程15实验步骤:3)客户端程序编程步骤(3)实现发送数据功能客户端准备实现当用户点击提交时,连接服务器,将界面中输入框的内容发送到服务器端。因此双击“send”按钮,进入该添加按钮事件的功能程序编写,代码如下:voidCCChenSiSocketAPIClientDlg::OnBnClickedButton2(){ WSADATAwsd;//用来存储版本 WSAStartup(MAKEWORD(2,2),&wsd);//winsock的打开,这个函数检查协议栈的安装情况,也就是检查系统中是否有windowssockets的实现库,初始化操作 SOCKETclient=socket(AF_INET,SOCK_STREAM,0);//建议一个套接字用来发送 UpdateData(); BYTEnFild[4];9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程16//得到IP地址的CString形式 CStringipstr; m_serverip.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]); ipstr.Format("%d.%d.%d.%d",nFild[0],nFild[1],nFild[2],nFild[3]);//以下是初始化一些地址和端口等参数 sockaddr_inserveraddr; serveraddr.sin_family=AF_INET; serveraddr.sin_addr.S_un.S_addr=inet_addr(ipstr); serveraddr.sin_port=htons(m_port); if(connect(client,(sockaddr*)&serveraddr,sizeof(sockaddr))!=0) { //开始发起连接,假如失败,则返回 AfxMessageBox("连接失败"); return; } CStringstr=m_sendstr.GetBuffer(); str=str+"\0"; send(client,str,256,0);//发送数据 GetDlgItem(IDC_EDIT1)->SetWindowText(_T(""));//发送完信息之后清空输入框 closesocket(client);//关闭套接字 WSACleanup();}9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程17实验步骤:3)客户端程序编程步骤(4)编译客户端程序编写完成后,同样需要对代码进行编译,操作方法与服务器端基本相同。把代码在编写过程中发声的各种错误改正后,即可编译成功。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程18实验步骤:4)运行服务端,客户端程序实现简易通信
编译成功后,可以通过菜单或者工具栏按钮来运行完成的程序。在编译成功的前提下,如果使用菜单,其中一种方法是选择Debug-StartDebugging,如图9-1-16所示;如果使用工具栏,可以选择如图9-1-17所示的按钮。正常运行时,会显示MFC项目中所设计的主对话框,然后依据所编写的程序进行操作,完成需要的功能。本实验中需要同时运行Server和Client两个工程中的程序,如图9-1-18所示。9.1SOCKET下基于TCP协议的通信编程实验网络空间安全技术实践教程19实验步骤:4)运行服务端,客户端程序实现简易通信运行时,先在服务器端输入本机IP和将要进行通信的本机端口,点击bind绑定IP和端口;其次,在客户端输入服务器端的IP和通信端口,在发送框里输入要发送的信息,点击Send即可在服务器端的接收框中显示信息;最后,在需要结束通信的时候,发送“quitTCP”即可结束通信。运行结果如图9-1-19所示。9.1SOCKET下基于TCP协议的通信编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工劳动力配置优化方案
- 2026西藏阿里地区日土县审计局招聘3名备考题库【夺分金卷】附答案详解
- 2026年4月贵州遵义市赤水市公益性岗位人员招聘12人备考题库(培优b卷)附答案详解
- 家电售后管理方案范本
- 2026辽宁营口大石桥市林业和草原局森林消防大队招聘6人备考题库及答案详解【夺冠系列】
- 2026河北邯郸市中西医结合医院选聘22人备考题库(夺冠)附答案详解
- 2026新疆第四师总医院春季招聘88人备考题库必考题附答案详解
- 2026云南玉溪市文化馆城镇公益性岗位招聘3人备考题库必考题附答案详解
- 2026广东深圳市宝安区教科院实验幼儿园招聘公办幼儿园短期主班教师1人备考题库附答案详解ab卷
- 2026年3月山东济南轨道交通集团运营有限公司社会招聘备考题库含完整答案详解【各地真题】
- 2026年青海省海南藏族自治州单招职业适应性测试题库附参考答案详解(模拟题)
- 2026春牛津译林版英语八年级下册Unit+8+Reading+(同步课件)
- 第一单元(单元测试 基础夯实)-高二语文人教统编版选择性必修下册
- 2025山西中煤一局集团有限公司应届高校毕业生招聘20人笔试历年典型考点题库附带答案详解2套试卷
- 2026年安克创新行测笔试题库
- 违反无菌技术操作
- AI养鱼:智慧渔业新模式
- 2025年《三级公共营养师》考试练习题库及答案
- 煤矿调度专项培训课件
- 2026年时事政治测试题库100道含完整答案(考点梳理)
- 2026年度安全培训计划
评论
0/150
提交评论