首页 > 其他 > 详细

消息队列实现实时通信

时间:2014-06-15 06:24:16      阅读:424      评论:0      收藏:0      [点我收藏+]

此实例是一个简单的使用消息队列进行实时聊天的本机通信程序,,发送端每发送一个消息,会立即被接收读取,在没有消息在消息队列中时,将处于阻塞状态。

终端1运行接收端

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf
{
    int type;
    char ptr[0];
};
int main(int argc, char *argv[])
{
    key_t key;
    key=ftok(argv[1],100);
    int msgid;
    msgid=msgget(key,IPC_CREAT|0600);
    pid_t pid;
    pid=fork();
    if(pid==0)
    {
        while(1)
        {
            printf("pls input msg to send:");
            char buf[128];
            fgets(buf,128,stdin);
            struct msgbuf *ptr=malloc(sizeof(struct msgbuf)+strlen(buf)+1);
            ptr->type=2;
            memcpy(ptr->ptr,buf,strlen(buf)+1);
            msgsnd(msgid,ptr,strlen(buf)+1,0);
            free(ptr);
        }
    }
    else
    {
        struct msgbuf
        {
            int type;
            char ptr[1024];
        };
        while(1)
        {
            struct msgbuf mybuf;
            msgrcv(msgid,&mybuf,1024,1,0);
            printf("rcv msg:%s\n",mybuf.ptr);
        }

    }
    return 0;
}

终端2运行发送端

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf
{
    int type;
    char ptr[0];
};
int main(int argc, char *argv[])
{
    key_t key;
    key=ftok(argv[1],100);
    int msgid;
    msgid=msgget(key,IPC_CREAT|0600);
    pid_t pid;
    pid=fork();
    if(pid==0)
    {
        while(1)
        {
            printf("pls input msg to send:");
            char buf[128];
            fgets(buf,128,stdin);
            struct msgbuf *ptr=malloc(sizeof(struct msgbuf)+strlen(buf)+1);
            ptr->type=1;
            memcpy(ptr->ptr,buf,strlen(buf)+1);
            msgsnd(msgid,ptr,strlen(buf)+1,0);
            free(ptr);
        }
    }
    else
    {
        struct msgbuf
        {
            int type;
            char ptr[1024];
        };
        while(1)
        {
            struct msgbuf mybuf;
            msgrcv(msgid,&mybuf,1024,2,0);
            printf("rcv msg:%s\n",mybuf.ptr);
        }

    }
    return 0;
}
 

消息队列实现实时通信,布布扣,bubuko.com

消息队列实现实时通信

原文:http://www.cnblogs.com/lakeone/p/3785927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!