基于socket的简单聊天室的设计与实现

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:yourice
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍了在Linux上用socket编程来设计并实现一个简单聊天室。首先选择了服务器的轮询工作方式,以满足多个用户进程的连接;然后从数据结构、模块开发和源码实现三个方面详细分析了聊天室的实现;最后将该聊天室与传统聊天室进行了比较,并指出该聊天室的优势所在。
  关键词:聊天室; Linux ;socket ;数据结构
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)21-30442-03
  
  The Design and Accomplishment of the Simple Chat-room Based on Socket
  ZHOU Liu-jun1,2, WU Jin-lei1
  (1.College of Information and Electrical Engineering of CUMT, Xuzhou 221008, China;2.Xuzhou Institute of Architectural Technology, Xuzhou 221008 China)
  Abstract: How to design and accomplish a simple chat room with socket in linux is introduced is introduced in this paper. In order to meet many connections of user process, the poll woking of server is selected firstly. Then accomplishment of the simple chat-room is analyzed particularly in the facets of data structure, module development and codeaccomplishment. According to the comparison of the chat room and the traditional chat room, advantage of the chat room is shown.
  Key words: chat room; linux; socket; data structure
  
  1 引言
  
  Socket聊天室与传统的CGI聊天室工作原理有很大的不同,其基本原理是抛开OGI和WWW服务器,根据HTML规范,接收到浏览器的请求以后,模仿WWW服务器的响应,将聊天内容发回浏览器。在浏览器看来就像浏览一个巨大的页面一样始终处于页面联接状态, 这就是一个专门的聊天服务器,一个简化了的WWW服务器。这样相比CGI方式来说,Socket聊天室的优点就很明显:不需要专门的WWW服务器,避开耗时的CGI 过程;如果使用单进程服务器,就不需要每次产生新进程;数据交换完全在内存中进行,不用读写文件;不需要定时刷新,减少屏幕的闪烁,减少对服务器的请求次数。
  linux作为一个优秀的操作系统,具有成本低、性能高、稳定性和源代码开放等特点,并吸收了Unix的20年的发展经验,内核精炼而稳定。鉴于socket聊天室和linux系统的优点,本文即在linux下,利用socket编程实现一个简单的聊天室。
  
  2 服务器设计
  
  聊天室采用client/server结构,在server进入listen状态之后,由于已有多个用户在线,所以程序需要同时对这些用户进行操作,并在它们之间实现信息交换。这在实现上称为I/O多路复用技术。下面即为几种常用的多路复用技术:
  2.1 多路复用技术
  多路复用一般有以下几种技术:
  1)子进程技术。应用多个子进程,每一个对一个单工阻塞方式通信。所有子进程通过IPC和父进程进行通信。父进程掌管所有信息。这种方式的缺点是实现复杂,而且由于IPC在各个操作系统平台上不完全一致,会导致可移植性降低。
  2)信号驱动的异步I/O技术。首先,异步I/O是基于信号机制的,并不可靠。其次,单一的信号不足以提供更多的信息来源。还是需要辅助以其他的手段,实现有很高的难度。
  3)select()技术。在BSD中提供了一种可以对多路I/O进行阻塞式查询的方法—select()。它提供同时对多个I/O描述符进行阻塞式查询的方法。
  4)非阻塞通信技术:将文件管道通过fcntl()设为非阻塞通信方式,每隔一段时间对他们实行一次轮询,以判断是否可以进行读写操作。这种技术实现简单,该聊天室即采用此种I/O复用技术,下面对其进行详细的介绍。
  2.2非阻塞通信技术
  对一个文件描述符指定的文件或设备, 有两种工作方式:阻塞与非阻塞。对于非阻塞状态,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。缺省情况下,文件描述符处于阻塞状态。
  在实现聊天室时,server 轮流查询与各client 建立 socket,一旦可读就将该socket中的字符读出并向其他client 发送。同时server 还要随时查看是否有新的client 试图建立连接,如果server在任何一个地方阻塞了,其他client发送的内容就会受到影响,新client 试图建立连接也会受到影响。因此,我们使用fcntl()将该文件描述符变为非阻塞方式,对是否有新连接及是否可读的判断都是非阻塞的,服务器的每次判断都会马上返回。这样任何一个client向server发送字符或者试图建立新连接,都不会对其他client的活动造成影响。
  
  3 聊天室实现
  
  下面从数据结构、模块开发和源码实现三个方面分析该聊天室的实现过程。
  3.1 主要数据结构
  本文用struct chat_struct chater[MAXUSERS]结构数组来记录系统中的每一个用户的重要信息:指向用户连接的套接字描述符、用户的数据缓冲区、用户的指令等。结构的定义如下:
  各成员含义如下:
  #define MAXUSERS 20
   Struct chat_struct
  {
   int sock_fd;
  char user_id[20];
  struct client_cmd
   {
  int cmd_type;
  char user_id[20];
   }cmd;
  int next_char;
  int data_pos;
  char buffer[MAXLINE];
  int slot_status;
  }chater[MAXUSERS];
  sock_fd:指向该用户连接的套接字描述符。
  user_id:用户的用户名,用于标志用户的身份。
  next_char:用于指示用户数据缓冲区中的写位置,即写指针。
  data_pos:用于指示用户指令中的消息的内容。
  slot_status:槽位的状态,标识槽位是否被使用。
  struct client_cmd cmd:将用户的数据记录分析后,把分析的结果存放在该结构中。用户的指令类型使用常量定义,这样的设计,有利于对系统进行进一步的扩充。
  3.2 模块的划分
  可以将应用划分为4个功能模块:用户状态检测模块、数据记录分析处理模块、结构访问模块和通信模块。
  1)用户状态检测模块用于检测系统中各个用户的状态。状态的划分应当根据应用的需求来确定,用户状态可分为3种:
  ①用户已经输入了一个数据记录,等待服务器处理。服务器读入数据记录,并调用数据记录分析处理模块来处理数据记录。
  ②用户退出系统,等待服务器清除用户槽位。服务器调用结构访问模块将用户的槽位释放。
  ③用户的其他行为被列为第3种状态。服务器只是读入数据,由于没有遇到数据记录的边界,所以它将在后面转化成状态①或②。
  2)数据记录分析模块,对读取的数据记录进行分析,如果指令正确,则处理指令。如果指令错误,进行出错处理。
  
  
  4 总结
  
  基于socket的聊天室,目前还比较少见,国内比较知名的有网易和碧海银沙聊天室。这种聊天室的特点很明显,不象CGI聊天室那样不管有没有人发言,都会定时刷新,而是当有人发言时,屏幕上才会出现新聊天内容。也不同于CGI聊天室由客户端浏览器定时请求聊天内容,而是由聊天服务器软件向客户浏览器主动发送信息。这种聊天室可以容纳许多人而性能不会明显降低,因此基于socket的聊天室较传统的聊天室有很大优势。
  
  参考文献:
  [1] 邹思轶.嵌入式linux设计与应用[M].北京:清华大学出版社,2002.
  [2] 任永铮.Linux C程序员指南[M].北京:国防工业出版社,2000.
  [3] 林宇,郭凌云.Linux网络编程[M].北京:人民邮电出版社,2000.
其他文献
摘要:电子技术课程是电气信息类的专业基础课,该课程的实验教学对培养学生创新思维、动手能力具有重要的、不可替代的作用。该文重点讨论了实验教学内容的整合与优化、问题式实验教学、实验中问题排除和实验项目库的构建。  关键词:电子技术课程;实验教学  中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2014)03-0601-02  电子技术课程是电气信息类专业极为重要的技术基础课,该课程
作为当今互联网应用的主要载体,笔记本与平板电脑都是大家平时必备工具。而且随着办公与娱乐在跨平台、跨设备上的互通应用,我们经常要在两个设备之间共享数据。平板电脑从笔记本中获取资料,笔记本管理平板电脑上的数据,这些应用操作如果通过USB数据线来传输显得极为繁琐,为了让两个设备之间的共享更自由,我们可以借助无线网络来实现。  一、安卓平板与本本互联互通  移动终端越来越普及,大家都同时拥有手机和平板。而
摘要:大数据具有数据量巨大、数据形式多样化等特点,大数据时代为教育和学习提供了丰富的信息资源,但也给教育模式和人才培养带来挑战。首先具体说明大数据时代的特点及对高校人才培养的影响,分析大数据时代对信息系统及相应人才的要求,结合教学实践研究大数据背景下信息系统专业的人才培养模式。  关键词:大数据时代;人才培养模式;信息系统专业  中图分类号:TP393 文献标识码:A 文章编号:1009-3044
摘要:作为世界教育发达国家, 新加坡高度重视职业技术教育,拥有创新的教学方法和成熟的改革模式;与政府企业的密切合作,更加突出了职业技术教育为国家经济发展服务的本位职责。该文结合当前我国职业教育的现状和新加坡培训过程中考察内容和学习经历,提出关于教学模式、教师再培训等方面的建议,对加快学校全国骨干校建设,推进课程改革,进而提高教学质量起到一定的作用。  关键词:教育“市场化”;技能大赛;校企合作  
摘要:以联通公司与学校联建现代化通信实验室为例,阐述了学校如何有效利用企业资源,建立高效的产学研平台。其中包括如何进行校企双向结合,提高实验人员的整体素质,提高学生探索和解决工程实际的能力,浅谈了如何优化资源配置,促进交叉学科的研究。  关键词:产学研平台;校企双向结合;资源配置  中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2013)09-2189-02  21世纪高等教育
摘要:该文在对中小企业网站问题调查研究的基础上,从企业网站的管理者和企业网站的开发者两个角度出发,提出了“站内优化、站外推广”的解决方案,使中小企业网站能够真正的为企业的宣传营销起到重要的作用。  关键词:企业网站;网站优化;网站推广  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)31-7276-03  Abstract: Based on the invest
摘要:“教学练战”一体化教学模式是将理论教学与实践教学融为一体, 以实战需要主导整个教学过程。包括一体化教学目标、一体化教学条件、一体化教学实施。基于“教学练战”教学模式本文创新提出了四式一体化教学法基本模型,并将此应用于《数据库应用技术》课程的实践教学,从课程教学方法建设上进行探索和研究。  关键词:教学练战; 数据库应用技术;四式一体化教学法  中图分类号:G642 文献标识码:A 文章编号:
摘要:根据科研机构中,科研项目管理的特点对科研项目管理系统的需求进行了研究,提出了采用微软公司的Active Server Pages结合SQL Server数据库系统的解决方案。该解决方案采用Browser/Server结构,浏览器的客户端无需安装任何组件,就可以使用本系统的所有功能;探讨了该解决方案的需求分析、程序设计、程序测试的全过程,系统总结了建立高效率科研项目管理系统的方法。  关键词:
摘要:当前航空电子系统的大容量存储设备一般选用NAND Flash作为存储介质,需使用具有高可用性和高可靠性的Flash文件系统,针对现有主流Flash文件系统,如Reliance、JFFS2、YAFFS2等,面向航电应用深入对比分析各自工作原理,给出航空电子系统选用Flash文件系统的建议。  关键词:航空电子系统;大容量存储;NAND flash;文件系统  中图分类号:TP311 文献标识码
摘要:该文介绍的移动教务系统基于Android平台构建,利用流行的Roboguice注入型框架、ImageLoader图片加载技术、AsyncHttpClient网络异步请求技术、JPush推送技术、HoloGraph图表绘制等技术进行开发,同时运用ViewHolder模式、Bitmap压缩等技术,对“移动教务系统”进行优化。  关键词:Android;移动教务;性能优化;异步加载  中图分类号: