第十一章基于Linux即时聊天程序设计(练习题,仅供参考)主讲人:欧忠良本章目标作为Linux高级阶段一个练习,让学员从实践中掌握课程知识点。实现即时聊天工具的设计思路群聊的设计思路私聊的设计思路文件传输的实现思路安全的共享内存管理方案功能需求技术平台:运行平台:Linux开发工具:vi/gcc/gdb/makefile软件功能客户端登陆群聊私聊文件传输*/gdb/makefile掌握Linux多进程技术的使用掌握在SystemV下的IPC技术:信号、消息队列、共享内存等等掌握Linux下TCPSOCKET编程技术程序框架客户端说明tty进程从控制终端获取用户的输入,并以管道的形式传递给socketio进程进行发送SocketIO进程负责读入管道数据即得到用户的输入,并通过socket按照自定义协议发送。负责读取socket,并分析和处理数据包,并显示。当发现网络中断的情况下,发送信号给tty进程,让其退出。服务器端说明(1)监听进程以IO复用模型,创建服务器监听,等待客户端连入;当接收到客户端的连接请求后,添加客户信息clientinfo到共享内存区,并fork一个socketio进程负责数据端口的读写SocketIO进程负责从socket中读取数据包,并送到接收缓冲队列中mqRecv(其中消息结构messageType=getpid())负责从mqSend缓冲消息队列中,读取messagetype=getpid()的消息数据,并将数据包发送出去。服务器说明(2)接收缓冲由消息队列实现,SOCKETIO进程读取到数据都送入这个队列,处理进程从该队列中读取数据包进行相应处理发送缓冲由消息队列实现,处理进程处理后要发送给各客户端数据都送入这个队列,SOCKETIO进程从该队列中读取数据包按照自定义协议发送出去处理进程根据包类型,进行相关的处理客户信息列表以共享内存实现,详见共享内存管理方案和信息结构自定义协议/数据包格式typedefstructdata_packet{ unsignedcharucPackType;//0:群聊1:私聊2:登陆3:在线列表包 characLoginName[10]; //送出数据包的客户端登录名 characDstName[10]; //数据包送达的客户端名 characData[80]; //聊天数据}DATAPACKHEAD;//数据包说明,当ucPackType如下时:0:acDstName为空1:acDstName,acLoginName不能为空2:acDstName,acLoginName为空,acData为登录名3:服务器端的应答包,acDstName,acLoginName为空acData的格式:loginname1;loginname2;…接收/发送缓冲消息结构typedefstructmymessage{ unsignedlongintnMessageType; DATAPACKstDP;}说明:被送进发送缓冲的消息:nMessageType等于socketio进程ID,以便各个socketio进程从发送缓冲中得到各自要发送的数据
11、即时聊天程序设计 来自淘豆网m.daumloan.com转载请标明出处.