这一期我们一步一步写一个基于消息队列的聊天应用。
目标:基于消息队列的聊天应用Server和Client端编写。
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。
预备知识:
消息队列基本原理
Linux 应用代码:
执行结果:
重要语法:
key_t ftok(const char *pathname, int proj_id);
功能:生成一个key(键值)
int msgget(key_t key, int msgflg);
功能:创建或取得一个消息队列对象
返回:消息队列对象的id 同一个key得到同一个对象
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:将msgp消息写入标识为msgid的消息队列
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
功能:从标识符为msgid的消息队列里接收一个指定类型的消息 并 存储于msgp中 读取后 把消息从消息队列中删除
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能:删除消息队列对象