zoukankan      html  css  js  c++  java
  • 消息队列实现实时通信

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

    终端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
    ",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
    ",mybuf.ptr);
            }
    
        }
        return 0;
    }
     
  • 相关阅读:
    check2
    LYF模板连接.txt
    mvc中的表现和数据分离怎么理解?
    node中websocket的使用
    vue随笔
    python安装Django常见错误
    node中的session的使用
    为什么很多IT公司不喜欢进过培训机构的人呢
    vue数据交互
    vuecli的服务代理
  • 原文地址:https://www.cnblogs.com/lakeone/p/3785927.html
Copyright © 2011-2022 走看看