码迷,mamicode.com
首页 > 其他好文 > 详细

消息队列实现实时通信

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

标签:style   class   blog   code   color   get   

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

终端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

消息队列实现实时通信

标签:style   class   blog   code   color   get   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!