主要是在linux下的消息队列进行聊天的实现,如有错误的地方请联系本人进行探讨。
在linux系统下
消息队列的聊天室实现的过程:
1.消息队列
消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。我们将称消息队列为
“队列”,其标识符为“队列I D”。
m s g g e t用于创建一个新队列或打开一个现存的队列。
m s g s n d用于将新消息添加到队列尾端。每个消息包含一个正长整型类型字段,一个非负
长度以及实际
数据字节(对应于长度),所有这些都在将消息添加到队列时,传送给m s g s n d。
m s g r c v用于从队列中取消息。
我们并不一定要以先进先出次序取消息,也可以按消息的类型字段取消息。
每个队列都有一个m s q i d d s结构与其相关。此结构规定了队列的当前状态。如图(1-1)
图(1-1)msqid_ds结构
调用的第一个函数通常是m s g g e t,其功能是打开一个现存队列或创建一个新队列。
#include
#include
#include
int msgget(key_t key, int flag) ;
返回:若成功则为消息队列I D,若出错则为- 1
调用m s g s n d将数据放到消息队列上。
#include
#include
#include
int msgsnd(int msqid, const void * pt r, size_tnbytes, int flag) ;
返回:若成功则为0,若出错则为- 1
正如前面提及的,每个消息都由三部分组成,它们是:正长整型类型字段、非负长度
(nbytes)以及实际数据字节(对应于长度)。消息总是放在队列尾端。ptr指向一个长整型
数,它包含了正整型消息类型,在其后立即跟随了消息数据。(若nbytes是0,则无消息数
据。)若发送的最长消息是5 1 2字节,则可定义下列结构:
struct mymesg {