东南大学计算机网络第三次实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学计算机网络第
三次实验报告
Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
东南大学自动化学院
实验报告
课程名称:信息通信网络概论
第3次实验
实验名称:实验三基于客户/服务器模式的网络通信编程实现院(系):自动化专业:自动化
姓名:学号:
实验室:金智楼实验组别:
同组人员:实验时间: 2016 年 12 月 13 日
评定成绩:审阅教师:
目录
一.实验目的和要求 (3)
二.实验原理 (3)
三. 实验方案与实验步骤 (4)
四.实验设备与器材配置 (5)
五.实验记录 (5)
六.实验总结 (10)
七.思考题或讨论题 (11)
附录:部分代码
一.实验目的和要求
1.进一步了解网络编程的过程;
2.掌握Windows环境下基于WinSock的编程方法和通信实现;
3.熟悉客户/服务器模式的网络通信编程实现,编写一个聊天工具,即以
客户端和服务器端的模式进行互发消息。
二.实验原理
一个在建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。根据不同的实际情况,
协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在“客户进程”和“服务进程”。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务-对客户的请求作出适当的反应。
这一请求/相应的过程可以简单的用图2-1表示。虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通过数据报套接口提供的。
图2-1 客户机/服务器模型
三.实验方案与实验步骤
1、客户机/服务器工作流程
图客户机/服务器工作流程
2、聊天室的工作流程
图聊天室工作流程
首先,服务器要创建一个用于侦听的套接字,为该套接字分配地址之后,调用listen()函数使它处于侦听状态;客户机在创建套接字完毕后,为套接字分配地址,然后调用connect()函数,请求与服务器套接字连接;服务器套接字在收到客户机的连接请示后,调用accept()函数,该函数创建一个用于连接的套接字。应用该套接字和客户机上的连接套接字,用户就可以在服务器和客户机之间进行数据传输了。在结束传输之后,客户机调用
closesocket()函数关闭套接字,服务器也调用该函数关闭用于侦听和连接的套接字。
3、套接字事件处理相关函数
OnAccept():监听套接字在断口听到连接请求时,应用程序框架调用该函数以告之可以接受或拒绝连接请求,调用Accept来接受请求,建立连接。
OnConnect():当客户端套接字连接请求完成后,应用程序框架调用该函数,告之是否成功。
OnSend():框架调用该函数通知该套接字现在可以调用Send函数开始传送数据。
OnReceive():框架调用该函数通知套接字可以调用Receive函数从数据缓冲区中取数据。
OnClose():框架调用该函数告之与其相连的对方套接字已被关闭。
4、系统实现
图系统实现过程
四.实验设备与器材配置
电脑、
五.实验记录
1、界面
(1)选择:客户机、服务器;
(2)输入:服务器名称、服务器端口、发送的消息;
(3)输出显示:发送的消息、接收的消息、发送和接收消息数目;
(4)按钮:连接/侦听、断开、发送、清空。
图界面设计
2、功能描述
(1)服务器端
i.建立Socket,绑定端口,并监听;
ii.接受客户端的连接;
iii.与客户端进行通讯;
iv.断开连接。
图服务器端
(2)客户端
i.建立Socket,并申请连接到服务器;
ii.与服务器进行通讯;
iii.断开连接。
图客户机端
3、改进
(1)获取对方主机信息
通过函数gethostname(hostname,sizeof(hostname))得到主机名,客户机获得服务器主机名为20WQ,服务器获得客户机主机名为20WQ(实验时使用同一台电脑进行调试,所以主机名是一样的),添加到接收信息列表中信息前面。
(2)添加发送接收时间
通过函数time()、localtime()获得当前系统时间,能够显示发送接收时间,格式为年/月/日时/分/秒,添加到接收信息列表中信息首部。
(3)显示发送、接收消息总数
通过()函数实现对列表中发送和接收到的信息计数,并显示在界面上,清空列表后,相应的重置为0。
(4)清空列表
通过函数()实现清空列表。
(5)添加背景图片、改变控件背景色、字体等。
上传bmp图片到Bitmap资源文件夹中,在OnPaint()中添加代码,通过不同图片的ID来设置不同的背景图片。
通过加入WM_CTLCOLOR消息,自动生成OnCtlColor()函数,利用SetBkMode()、SetTextColor()、SetBkColor()、CreateSolidBrush()、SetFont()等函数设置背景格式、改变控件背景色和字体大小颜色等。
图改进功能
六.实验总结
在原demo程序的基础上,增加了获取对方主机名、添加发送时间、清空列表等功能,并且尝试添加背景图片,利用WM_CTLCOLOR消息实现对MFC 界面的修改。
通过本次实验,我对“点对点”模型有了非常深刻的认识,进一步了解了网络编程的过程,掌握了Windows环境下基于WinSock的编程方法和通讯实现,并且实现了客户端和服务器的连接通信。对相关套接字事件处理函数