基于socket套接字的应用(一)---IPC

在这篇文章中笔者将以socket应用为重点, 跟大家分享一下socket的应用. 我们都知道socket是通信套接字, 其实socket的应用不仅可以用在网络通信中, 本地进程通信也可以使用socket来实现.

什么是基于socket的IPC

IPC 通信有多种实现方式, 从大的类别上可以分为基于文件的IPC 和 基于内存的IPC. 基于文件的IPC又分为基于有序文件和基于无序文件. 基于有序文件的实现方式又分为管道和socket. 本文主要说的就是基于socket有序文件的IPC.

通过对等模型建立socket的IPC

建立socket, 在内存中开辟一块空间, 返回一个文件描述符号.这块内存空间可以指向本地文件或者网卡设备(这个取决于绑定的地址, 地址唯一决定了一个物理设备). 如果是本地文件, 系统会自动创建一个socket文件. 如果是网卡, socket开辟的这片内存空间指向的就是一个ip地址.

向socket开辟的内存中写数据,如果bind的是本地文件, 内存中的数据就会记录到本地socket文件中, 如果bind的地址是网卡, 内存中的数据就会发送给网卡.

接收端进程

        int fd = socket(AF_UNIX,SOCK_DGRAM,0);
        if(fd == -1){
                      printf("socket error: %m \n");
                      exit(-1);
                }
        printf("socket success! \n");
        
        //2, 构造本地文件地址
        struct sockaddr_un addr = {0};
        addr.sun_family = AF_UNIX;
        memcpy(addr.sun_path,"IPC.sock", strlen("IPC.sock"));
        
        //3, 把socket绑定在地址上
        r = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
        if(r == -1) {
                        printf("bind error: %m \n");
                        close(fd);
                        exit(-1);
                }  
        printf("bind success ! \n");
        
        //4, 接收数据
        char buf[200];
        while(1){
            bzero(buf, sizeof(buf));
            r = read(fd, buf, sizeof(buf));// 从fd中读取数据放入buf中, 读取的长度是sizeof(buf)
            buf[r] = 0;
            printf("%s\n", buf);
        }
        
        //5, 关闭
        close(fd);
        
        //6, 删除socket 文件
        unlink("IPC.sock");
发送端进程

    int fd;
    int r;
    struct sockaddr_un addr = {0};
    
    //1, ��socket��
    fd = socket(AF_UNIX, SOCK_DGRAM, 0);
    
    //2, ������������������������连接
    addr.sun_family = AF_UNIX;
    memcpy(addr.sun_path, "IPC.sock", strlen("IPC.sock")); 
    r = connect(fd, (struct sockaddr*)&addr, sizeof(addr));
    
    //3, ������������发送数据
    write(fd, "hello! Alice!", strlen("hello! Alice!"));
    
    //4, ����关闭网络
    close(fd);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,816评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,384评论 11 349
  • Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
    隔壁老李头阅读 12,122评论 11 56
  • 知道那首诗是写给我的, 清丽婉约 让我感动…… 可你在哪里? 那思念,那对白, 如云烟缥缈 清唱离愁…… 为什么你...
    A小天鹅阅读 223评论 4 5
  • 打草稿,自动铅笔打草稿,刻画人物五官 上肤色 瑰红+黄+橙 阴影部分紫蓝 分出冷暖 继续加冷色阴影,区分冷暖 整体...
    梦秦吖阅读 2,302评论 31 101