欢迎来到天天文库
浏览记录
ID:15044789
大小:121.24 KB
页数:11页
时间:2018-08-01
《基于多进程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)
此文档下载收益归作者所有