




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、优质文本东南大学自动化学院实 验 报 告课程名称: 信息通信网络概论 第3次实验实验名称: 实验三 基于客户/效劳器模式的网络通信编程实现 院 系: 自动化 专 业: 自动化 姓 名: 学 号: 实 验 室: 金智楼 实验组别: 同组人员: 实验时间: 2016 年 12 月 13 日评定成绩: 审阅教师: 目 录一实验目的和要求······················
2、183;··············3二实验原理··································
3、183;········3三. 实验方案与实验步骤·································4四实验设备与器材配置····
4、183;····························5五实验记录····················
5、183;······················5六实验总结··························
6、183;···············10七思考题或讨论题································
7、3;···11附录:局部代码一 实验目的和要求1. 进一步了解网络编程的过程;2. 掌握Windows环境下基于WinSock的编程方法和通信实现; 3. 熟悉客户/效劳器模式的网络通信编程实现,编写一个聊天工具,即以客户端和效劳器端的模式进行互发消息。二 实验原理一个在建立分布式应用时最常用的范例便是客户机/效劳器模型。在这种方案中客户应用程序向效劳器程序请求效劳。这种方式隐含了在建立客户机/效劳器间通讯时的非对称性。客户机/效劳器模型工作时要求有一套为客户机和效劳器所共识的惯例来保证效劳能够被提供或被接受。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。
8、根据不同的实际情况,协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方那么是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非对称的,当效劳被提供时必然存在“客户进程和“效劳进程。 一个效劳程序通常在一个众所周知的地址监听对效劳的请求,也就是说,效劳进程一直处于休眠状态,直到一个客户对这个效劳的地址提出了连接请求。在这个时刻,效劳程序被“惊醒并且为客户提供效劳对客户的请求作出适当的反响。这一请求/相应的过程可以简单的用图2
9、-1表示。虽然基于连接的效劳是设计客户机/效劳器应用程序时的标准,但有些效劳也是可以通过数据报套接口提供的。图2-1 客户机/效劳器模型三 实验方案与实验步骤1、 客户机/效劳器工作流程图3.1 客户机/效劳器工作流程2、 聊天室的工作流程图3.2 聊天室工作流程首先,效劳器要创立一个用于侦听的套接字,为该套接字分配地址之后,调用listen()函数使它处于侦听状态;客户机在创立套接字完毕后,为套接字分配地址,然后调用connect()函数,请求与效劳器套接字连接;效劳器套接字在收到客户机的连接请示后,调用accept()函数,该函数创立一个用于连接的套接字。应用该套接字和客户机上的连接套接字
10、,用户就可以在效劳器和客户机之间进行数据传输了。在结束传输之后,客户机调用closesocket()函数关闭套接字,效劳器也调用该函数关闭用于侦听和连接的套接字。3、 套接字事件处理相关函数OnAccept():监听套接字在断口听到连接请求时,应用程序框架调用该函数以告之可以接受或拒绝连接请求,调用Accept来接受请求,建立连接。OnConnect():当客户端套接字连接请求完成后,应用程序框架调用该函数,告之是否成功。OnSend():框架调用该函数通知该套接字现在可以调用Send函数开始传送数据。OnReceive():框架调用该函数通知套接字可以调用Receive函数从数据缓冲区中取数
11、据。OnClose():框架调用该函数告之与其相连的对方套接字已被关闭。4、 系统实现图3.3 系统实现过程四 实验设备与器材配置电脑、VC6.0五 实验记录1、 界面(1) 选择:客户机、效劳器;(2) 输入:效劳器名称、效劳器端口、发送的消息;(3) 输出显示:发送的消息、接收的消息、发送和接收消息数目;(4) 按钮:连接/侦听、断开、发送、清空。图5.1 界面设计2、 功能描述1效劳器端i. 建立Socket,绑定端口,并监听;ii. 接受客户端的连接;iii. 与客户端进行通讯;iv. 断开连接。图5.2 效劳器端2客户端i. 建立Socket,并申请连接到效劳器;ii. 与效劳器进行
12、通讯;iii. 断开连接。图5.3 客户机端3、 改良(1) 获取对方主机信息通过函数gethostname(hostname,sizeof(hostname)得到主机名,客户机获得效劳器主机名为2013-20140524WQ,效劳器获得客户机主机名为2013-20140524WQ实验时使用同一台电脑进行调试,所以主机名是一样的,添加到接收信息列表中信息前面。(2) 添加发送接收时间通过函数time()、localtime()获得当前系统时间,能够显示发送接收时间,格式为年/月/日 时/分/秒,添加到接收信息列表中信息首部。(3) 显示发送、接收消息总数通过m_list.GetCount()函
13、数实现对列表中发送和接收到的信息计数,并显示在界面上,清空列表后,相应的重置为0。(4) 清空列表通过函数m_list.ResetContent()实现清空列表。(5) 添加背景图片、改变控件背景色、字体等。上传bmp图片到Bitmap资源文件夹中,在OnPaint()中添加代码,通过不同图片的ID来设置不同的背景图片。通过参加WM_CTLCOLOR消息,自动生成OnCtlColor()函数,利用SetBkMode()、SetTextColor()、SetBkColor()、CreateSolidBrush()、SetFont()等函数设置背景格式、改变控件背景色和字体大小颜色等。图5.4 改
14、良功能六 实验总结在原demo程序的根底上,增加了获取对方主机名、添加发送时间、清空列表等功能,并且尝试添加背景图片,利用WM_CTLCOLOR消息实现对MFC界面的修改。通过本次实验,我对“点对点模型有了非常深刻的认识,进一步了解了网络编程的过程,掌握了Windows环境下基于WinSock的编程方法和通讯实现,并且实现了客户端和效劳器的连接通信。对相关套接字事件处理函数OnAccept()、OnConnect()、OnSend()、OnReceive()、OnClose()有了一定了解,熟悉了效劳器和客户端不同的工作流程。七 思考题或讨论题1、 结合所学知识,谈谈自己对TCP三次握手的理解
15、。1) 主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?,这是第一次对话;2) 主机B向主机A发送同意连接和要求同步同步就是两台主机一个在发送,一个在接收,协调工作的数据包:“可以,你什么时候发?,这是第二次对话;3) 主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!,这是第三次对话。三次“对话的目的是使数据包的发送和接收同步,经过三次“对话之后,主机A才向主机B正式发送数据。2、 TCP协议有什么优点,根据你的理解说说为什么 要采用TCP作为底层协议?(1) 优点:面向连接、传输可靠、无拥塞、无乱序、无丢包、完整性检查、可重传;(2) TCP协议对应于传输层,
16、而 协议对应于应用层, 协议是建立在TCP协议根底之上的,当浏览器需要从效劳器获取网页数据的时候,会发出一次 请求。 会通过TCP建立起一个到效劳器的连接通道,当本次请求需要的数据完毕后, 会立即将TCP连接断开。附录:局部代码1、获取对方主机信息添加发送接收时间void CTalkDlg:OnReceive()CString mDay;CString mTime;CString ttime;time_t t1; t1 = time(NULL); /机器时间struct tm *p; p = localtime(&t1); /转换为本地时间mDay.Format("%4d/%
17、2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);char* pBuf = new char1025;/char pBuf1025;int nBufSize = 1024;int nReceived;char hostname100;CString strReceived; nReceived = m_sConnectSocket.Receive(pBuf,nBufS
18、ize); /接收消息 /判断消息接收是否成功?if(nReceived!=SOCKET_ERROR)gethostname(hostname,sizeof(hostname); /获取对方主机信息pBufnReceived = NULL; /保存接收消息的有效局部strReceived = pBuf; /将消息转化为CString对象/添加主机信息和发送时间strReceived=mDay+mTime+" "+hostname+": "+strReceived;/将消息添加到“已接收的消息列表框m_listReceived.AddString(strR
19、eceived);m_Countb = m_listReceived.GetCount();/显示接收信息数UpdateData(FALSE); /更新对话框elseAfxMessageBox("信息接收错误!",MB_OK|MB_ICONSTOP); delete pBuf;2、 显示发送、接收消息总数void CTalkDlg:OnSendMsg() CString mDay;CString mTime;CString ttime;time_t t1; t1 = time(NULL); /机器时间struct tm *p; p = localtime(&t1);
20、 /转换为字符串时间mDay.Format("%4d/%2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);int nLen;/消息长度int nSent;/已发送消息的长度/从对话框取回数据UpdateData(TRUE);/判断要发送的消息是否为空if(!m_strMsg.IsEmpty()nLen = m_strMsg.GetLength();/获取消息
21、的长度nSent = m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen); /发送消息if(nSent!=SOCKET_ERROR) /发送是否成功/添加主机信息和发送时间m_strMsg=mDay+mTime+" send: "+m_strMsg;/将消息添加到“已发送列表框m_listSent.AddString(m_strMsg);m_Counta = m_listSent.GetCount();/显示发送信息数UpdateData(FALSE); /更新对话框elseAfxMessageBox("信息发送错误&quo
22、t;,MB_OK|MB_ICONSTOP);m_strMsg.Empty();/去除当前信息UpdateData(FALSE);3、 清空列表void CTalkDlg:OnButton1() / TODO: Add your control notification handler code herem_listSent.ResetContent();/清空发送列表m_Counta = m_listSent.GetCount();/重置发送消息数UpdateData(FALSE);void CTalkDlg:OnButton2() / TODO: Add your control notif
23、ication handler code herem_listReceived.ResetContent();/清空接受列表m_Countb = m_listReceived.GetCount();/重置接收消息数UpdateData(FALSE);4、 添加背景图片void CTalkDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in cli
24、ent rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);else/CDialog:OnPaint();CPaintDC dc(this); CRec
25、t rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP3); /IDB_BITMAP3是对应的IDBITMAP bitmap; bmpBackground.GetBitmap(&bitmap); Cbitmap*pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);5、 改变背景色、字体大小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程上门维修培训
- 肿瘤内科专科质控项目
- 视力检查流程
- 怎样教育孩子学会倾听
- 矿业转型中的生态修复EPC服务解决方案探讨
- 人力资源服务质量提升方案
- 营养与健康产业的可持续发展探讨考核试卷
- 远洋货物运输的船舶材料科学考核试卷
- 食品批发商业务知识掌握与应用能力提升实践考核试卷
- 非织造布在眼镜清洁布的应用考核试卷
- 2024版新能源汽车充电站场地租赁及充电服务合同2篇
- 特种设备日管控、周排查、月调度模板
- 急性髓系白血病护理个案
- 儿童脓毒血症护理
- 顶板事故应急演练
- 智研咨询发布:中国企业数字化解决方案行业市场发展环境及前景研究报告
- 《大学计算机基础案例教程(微课版)第2版》全套教学课件
- 食堂食材配送采购 投标方案(技术方案)
- 贵州遵义四中2022自主招生物理试卷试题真题(含答案)
- NBT 35095-2017 水电工程小流域水文计算规范
- 2024年广东省中考生物试卷(含答案)
评论
0/150
提交评论