基于多进程qq聊天软件设计

基于多进程qq聊天软件设计

ID:15044789

大小:121.24 KB

页数:11页

时间:2018-08-01

基于多进程qq聊天软件设计_第1页
基于多进程qq聊天软件设计_第2页
基于多进程qq聊天软件设计_第3页
基于多进程qq聊天软件设计_第4页
基于多进程qq聊天软件设计_第5页
资源描述:

《基于多进程qq聊天软件设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于多进程的QQ聊天程序设计一、功能需求描述a)用户名登陆聊天,人与人之间交流是必不可少的。b)私聊,与特定的用户聊天c)群聊,向所有的用户发送消息,大家一起聊欢乐多二、server端输入:各客户端发来的消息。输出:向各个客户端的私有消息队列发送消息Client端输入:a,键盘输入。b,server端发来的消息主要应用到了C语言里的消息队列、管道、数据结构链表的建立、插入、遍历等三、程序测试截图/*头文件*/#ifndef__INCLUDE_H__#define__INCLUDE_H__#include#include#inclu

2、de#include#include#include#include#include#include/*enum_msg_type{MSG_TYPE_MIN=0,MSG_TYPE_INPUT,MSG_TYPE_STRING,MSG_TYPE_TEST,MSG_TYPE_MAX}msg_type;*//*structmessage{longmsg_type;charmsg_text[BUFSIZ];};*/struct

3、msg_server{//消息结构体longmytype;//消息类型,我用的是发送消息的进程号intmy_msgid;//客户端的私有消息队列号charmyname[10];//客户端用户姓名charaim_name[10];//此条消息将要发送的对象chartext[BUFSIZ];//消息正文structmsg_server*next;//链表节点连接指针};/*structmsg_land{inttype;intpid;intmsgid;charname[10];};structmsg_chat{intpid;intmsgid;charname[10];c

4、haraim_name[10];chartext[BUFSIZ];};*/#endif/*服务器*/#include"include.h"staticintpid;//进程号staticstructmsg_server*Lp;//测试用的staticintlen;//消息长度staticstructmsg_serverbuf;//父进程向子进程通过管道发送消息的缓冲区staticstructmsg_serverbuf_c;//子进程通过管道接收消息缓存区staticstructmsg_server*ps;staticstructmsg_servermsg_rcv;

5、//父进程通过消息队列接收消息缓存区staticstructmsg_server*L;staticstructmsg_server*Q;staticintcom_qid;//公共消息队列号staticintflag;//判断是不是登陆信息的标志staticstructmsg_server*tmp;//用于遍历的临时结构体循环变量statickey_tkey;staticintpfd[2];//用于管道通信的文件标识符staticstructmsg_server*H;//众所周知的消息队列链表头staticcharoffline[]="对不起,您找的用户不在线.

6、请输入quit重新选择聊天对象";/*SIGINT信号处理,删除消息队列,关闭管道文件*/voidmy_func(intsign_no){if(sign_no==SIGINT){if(msgctl(com_qid,IPC_RMID,NULL)<0){perror("msgctl");exit(1);}close(pfd[0]);close(pfd[1]);_exit(1);}}/*退出处理函数入退出栈*/voidmy_exit(void){if(msgctl(com_qid,IPC_RMID,NULL)<0){perror("msgctl");exit(1);

7、}close(pfd[0]);close(pfd[1]);}/*消息结构体进入链表*/intget_in(structmsg_server*L,structmsg_servermsg_rcv){intflag=0;//判断是不是新登录用户structmsg_server*new_node;while(1){if(L->mytype==msg_rcv.mytype){//若找到属于本用户的结点strncpy(L->text,msg_rcv.text,strlen(msg_rcv.text));//将消息放入链表结点文本区(覆盖)break;}if(L->next==

8、NULL)

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

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

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