并发服务器III――多路IO模型.doc

并发服务器III――多路IO模型.doc

ID:58453272

大小:1.52 MB

页数:31页

时间:2020-09-03

并发服务器III――多路IO模型.doc_第1页
并发服务器III――多路IO模型.doc_第2页
并发服务器III――多路IO模型.doc_第3页
并发服务器III――多路IO模型.doc_第4页
并发服务器III――多路IO模型.doc_第5页
资源描述:

《并发服务器III――多路IO模型.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、四川大学计算机学院、软件学院实验报告课程名称信息安全产品开发实践 实验课时5实验项目并发服务器III——多路I/O模型实验时间2011年11月04号实验目的1)继续了解Linux下C语言程序开发的过程2)了解LinuxI/O的工作模式3)了解多路I/O复用及其工作过程4)掌握多路I/O复用的相关函数的使用5)实现多路I/O多路复用并发服务器模型 实验环境VMware5.0,RedHatLinux9.0实验内容(算法、程序、步骤和方法)试验题目结合教师给的两个参考程序(基于select的远程并发服务器和基于select的聊天程序),

2、利用select函数实现在Linux环境下实现一个聊天室程序,要求:1.用户默认处于广播模式,一个客户在其客户端发送的消息,其它客户端用户全部可以收到;2.程序支持下列命令/help:显示帮助信息(思考:信息是放在客户端还是服务器端);/quit:用户退出聊天室,同时将退出信息广播给其他用户;/who:显示在线用户;/send用户名消息:向指定用户发送点到点消息实验:在之前的实验中我们已经实现了多进程及多线程的并发服务器的模型,但它们都有自己的缺陷,今天我们将利用一种更好的方式来编写我们的并发服务器,即多路I/O复用。下面的图显示

3、了多路I/O复用工作过程同时我们画出多路I/O复用并发服务器的流程图如下:接下来可以整理下我们的实现思路,服务器端:1、完成服务器的初始化工作;2、对侦听套接字进行侦听;3、将侦听套接字放入读集合;4、while(1){select(maxfd+1,读套接字,…);如果是侦听套接字被激活{建立连接套接字;将连接套接字放入读套接字集合}如果是连接套接字被激活{利用连接套接字进行数据通讯;}}客户端:1、套接字初始化;2、调用connect建立连接;3、服务器发送客户名字;4、将套接字和标准输入加入读集合5、while(1){如果是套

4、接字被激活将数据通过套接字发送给服务器;}如果是标准输入被激活{将数据放入发送缓冲区;判断输入是否为“/quit”如果是,退出客户端程序;}}实验步骤:(1)打开虚拟机,利用VI编辑器编写服务器端tcpserver.c程序(2)保存tcpserver.c,使用命令gcc–otcpservertcpserver.c命令编译程序。(3)在VI编辑器编写客户端tcpclient.c程序(4)保存tcpclient.c,使用命令gcc–otcpclienttcpclient.c命令编译程序。(5)执行./tcpserver命令,打开服务器

5、(6)打开另一个终端,执行./tcpclient127.0.0.1命令,第一个客户连接服务器,提示用户输入名字(7)输入名字wangdong,同时服务器端显示用户wangdong进入聊天室(8)按照(6)和(7)两个步骤,再另外打开两个终端,作为客户端,再注册两个用户,用户名字分别为tcp和udp。操作过程如下所示:(9)在用户wangdong端输入信息,hello,nicetomeetyou。用户tcp和udp都收到了这条消息,这样就实现了题目的第一个要求(10)在用户wangdong端输入命令/help,系统打印出帮助信息(1

6、1)在用户wangdong端输入命令/who,系统打印出当前在线的所有用户(12)在用户wangdong端输入命令/sendtcpIloveyou,向tcp发送消息,tcp正确接收到消息(13)在用户wangdong端输入命令/quit,用户wangdong退出聊天室,服务器端显示wangdong下线。经过(10)(11)(12)(13)四个步骤就实现了实验题目的第二个要求。(接上)实验内容(算法、程序、步骤和方法)附试验源代码(附部分注释)://tcpserver.c#include#include

7、b.h>#include#include#include#include#include#include#include#definePORT8900#defineBUF_SIZE2048structClient{intfd;;//客户端连接套接字charname[256];];//客户的名字intfirst;;//用于只是用户是否刚刚登陆};intmain(){int

8、listend;intconnected;inttempid;intsendnum;intrecvnum;charsend_buf[2048];charrecv_buf[2048];charcommand[2048];intret;charbuf[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。