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;
    }
     
  • 相关阅读:
    XtraBackUp 热备份工具
    (原始)数据库的备份与恢复
    liunx 中安装mysql 图形界面 phpmyadmin
    mysql 引擎
    使用正则进行HTML页面属性的替换
    mysql 表锁死的问题
    mysql 函数tree状
    tree 树状构建
    java项目部署jar包
    RSA2
  • 原文地址:https://www.cnblogs.com/lakeone/p/3785927.html
Copyright © 2011-2022 走看看