计算机网络第三次实验(共12页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《计算机网络第三次实验(共12页).doc》由会员分享,可在线阅读,更多相关《计算机网络第三次实验(共12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上东南大学自动化学院实 验 报 告课程名称: 信息通信网络概论 第3次实验实验名称: 实验三 基于客户/服务器模式的网络通信编程实现 院 (系): 自动化 专 业: 自动化 姓 名: XXX 学 号: 08016XXX 实 验 室: 金智楼 实验组别: 同组人员: 实验时间: 2018年 5月21 日评定成绩: 审阅教师: 目 录一 实验目的和要求1. 进一步了解网络编程的过程;2. 掌握Windows环境下基于WinSock的编程方法和通信实现; 3. 熟悉客户/服务器模式的网络通信编程实现,编写一个聊天工具,即以客户端和服务器端的模式进行互发消息。二 实验原理一个在
2、建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。根据不同的实际情况,协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非
3、对称的,当服务被提供时必然存在“客户进程”和“服务进程”。 一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务对客户的请求作出适当的反应。这一请求/相应的过程可以简单的用图2-1表示。虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通过数据报套接口提供的。图2-1 客户机/服务器模型三 实验方案与实验步骤1、 客户机/服务器工作流程图3.1 客户机/服务器工作流程2、 聊天室的工作流程图3.2 聊天室工作流程首先,服务器要创建一个用于侦听
4、的套接字,为该套接字分配地址之后,调用listen()函数使它处于侦听状态;客户机在创建套接字完毕后,为套接字分配地址,然后调用connect()函数,请求与服务器套接字连接;服务器套接字在收到客户机的连接请示后,调用accept()函数,该函数创建一个用于连接的套接字。应用该套接字和客户机上的连接套接字,用户就可以在服务器和客户机之间进行数据传输了。在结束传输之后,客户机调用closesocket()函数关闭套接字,服务器也调用该函数关闭用于侦听和连接的套接字。3、 套接字事件处理相关函数OnAccept():监听套接字在断口听到连接请求时,应用程序框架调用该函数以告之可以接受或拒绝连接请求
5、,调用Accept来接受请求,建立连接。OnConnect():当客户端套接字连接请求完成后,应用程序框架调用该函数,告之是否成功。OnSend():框架调用该函数通知该套接字现在可以调用Send函数开始传送数据。OnReceive():框架调用该函数通知套接字可以调用Receive函数从数据缓冲区中取数据。OnClose():框架调用该函数告之与其相连的对方套接字已被关闭。4、 系统实现图3.3 系统实现过程实验具体步骤如下: 1) 利用 MFC AppWizard 生成程序框架 在Visual C+的IDE环境下选择菜单File NewProjects MFC AppWizard(exe)
6、 Project Name“OK”“NEXT”Windows Sockets“ Finish”按钮,选择“OK” 按钮,应用程序的框架就将自动创建。2) 增加控件对象 在创建了应用程序框架之后,可以布置程序的主对话框,向应用程序的主对话框添 加控件。设计好了对话框之后,选取 View 菜单中的 ClassWizard 菜单项,或直接按 “Ctrl+W ”,打开 MFC ClassWizard,将对话框中的控件和变量相关联。3) 从 CAsyncSocket 类继承 选择Insert菜单中的New Class选取Class type为Generic Class在Base class 的 Deri
7、ved From 列中输入 CAsyncSocket,在 As 列中接受默认值 public,点击” OK”按钮,就可以把这个新创建的类添加到应用程序中。 向该套接字类中添加一个成员变量,用作指向父对话框窗口的指针,指针变量的类 型为 CTalkDlg*(Cdialog 的派生类),变量名为 m_pDlg,访问权限为私有。最后,添加套接字类事件处理函数,这些函数将用于调用对话框中名称类似的那些函数。4) 建立客户机与服务器之间的连接 为了完成连接,需要添加对套接字事件的处理函数,在对话框类中添加 OnAccept() 事件处理函数和 OnConnect()事件处理函数。 如果现在可以编译和运行
8、应用程序,就可以启动两个副本,把其中一个设置为侦听 模式,然后把另一个应用程序与之相连接。为此,先向对话框类()添加三个成员函数, 这三个函数是套接字类()的事件处理函数需要调用的。把三个函数的类型都指定为 void,访问权限为公共。指定第一个函数声明为 OnSend(),第二个函数的声明为 OnReceive,第三函数的声明为 OnClose。5) 发送和接收数据 如果两个应用程序间建立了连接,用户就能够在对话框窗口中的编辑框中输入文本 消息,然后单击“发送”按钮,就应该可以把消息发送到另一个应用程序,一旦消息发 送出去了,它将被添加到已发送消息的列表框中。 当“发送”按钮被单击之后,应用程
9、序需要检查是否有消息输入了编辑框,获取该 消息的长度,并发送该消息,然后把此消息添加到列表框中。为了在应用程序中添加此 项功能,使用Class Wizard向“发送”按钮(ID:IDOK)的单击事件(BNCLICKED)添加 一个事件处理函数,注意不要接受默认的函数名,将函数名改成OnSendMsg(),编辑该 函数。 对于消息的接收方,当套接字的OnReceive事件被触发时,表明一个消息已经到达 了,可以用Receive()函数从套接字检索到该消息。如果消息被顺利检索到,需要把接 收的字符数组转换成Cstring类型,并把接收的消息添加到已接收的消息的列表框中。 通过编辑对话框类的OnRe
10、ceive()函数。6) 终止连接 结束消息传送之后应该终止两个应用程序之间的连接,这个终止连接的操作是由客 户机应用程序的用户通过单击“断开”按钮来实现的。然后应用程序会接收到一个 OnClose套接字事件。和建立连接的过程相反,连接的套接字需要断开,发送消息的控 件需要置为禁用状态。在客户端,“连接”按钮控件由禁用状态变成可用,因为应用程序允许客户机程序改变某些参数,并打开与另一个服务器程序的连接。同时,服务器应用程序继续侦听是否有其他的连接请求,侦听的端口等信息不变。四 实验设备与器材配置1、能连网的个人PC机一台。2、Visual C+ 6.0 软件五 实验记录1、用户界面1) 选择类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 第三次 实验 12
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内