zoukankan      html  css  js  c++  java
  • Unix domain socket

    Unix domain socket

    原文:https://www.cnblogs.com/sparkdev/p/8359028.html

    UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。

    #include <stdlib.h>  

    #include <stdio.h>  

    #include <stddef.h>  

    #include <sys/socket.h>  

    #include <sys/un.h>  

    #include <errno.h>  

    #include <string.h>  

    #include <unistd.h>  

    #include <ctype.h>   

    #define MAXLINE 80  

    char *socket_path = "server.socket";  

    int main(void)  

    {  

        struct sockaddr_un serun, cliun;  

        socklen_t cliun_len;  

        int listenfd, connfd, size;  

        char buf[MAXLINE];  

        int i, n;  

        if ((listenfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {  

            perror("socket error");  

            exit(1);  

        }  

        memset(&serun, 0, sizeof(serun));  

        serun.sun_family = AF_UNIX;  

        strcpy(serun.sun_path, socket_path);  

        size = offsetof(struct sockaddr_un, sun_path) + strlen(serun.sun_path);  

        unlink(socket_path);  

        if (bind(listenfd, (struct sockaddr *)&serun, size) < 0) {  

            perror("bind error");  

            exit(1);  

        }  

        printf("UNIX domain socket bound ");  

          

        if (listen(listenfd, 20) < 0) {  

            perror("listen error");  

            exit(1);          

        }  

        printf("Accepting connections ... ");  

        while(1) {  

            cliun_len = sizeof(cliun);         

            if ((connfd = accept(listenfd, (struct sockaddr *)&cliun, &cliun_len)) < 0){  

                perror("accept error");  

                continue;  

            }  

              

            while(1) {  

                n = read(connfd, buf, sizeof(buf));  

                if (n < 0) {  

                    perror("read error");  

                    break;  

                } else if(n == 0) {  

                    printf("EOF ");  

                    break;  

                }  

                  

                printf("received: %s", buf);  

                for(i = 0; i < n; i++) {  

                    buf[i] = toupper(buf[i]);  

                }  

                write(connfd, buf, n);  

            }  

            close(connfd);  

        }  

        close(listenfd);  

        return 0;  

    }

    #include <stdlib.h>  

    #include <stdio.h>  

    #include <stddef.h>  

    #include <sys/socket.h>  

    #include <sys/un.h>  

    #include <errno.h>  

    #include <string.h>  

    #include <unistd.h>  

    #define MAXLINE 80  

    char *server_path = "server.socket";  

    int main() {  

        struct  sockaddr_un serun;  

        int len;  

        char buf[100];  

        int sockfd, n;  

        if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0){  

            perror("client socket error");  

            exit(1);  

        }   

        memset(&serun, 0, sizeof(serun));  

        serun.sun_family = AF_UNIX;  

        strcpy(serun.sun_path, server_path);  

        len = offsetof(struct sockaddr_un, sun_path) + strlen(serun.sun_path);  

        if (connect(sockfd, (struct sockaddr *)&serun, len) < 0){  

            perror("connect error");  

            exit(1);  

        }  

        while(fgets(buf, MAXLINE, stdin) != NULL) {    

             write(sockfd, buf, strlen(buf));    

             n = read(sockfd, buf, MAXLINE);    

             if ( n < 0 ) {    

                printf("the other side has been closed. ");    

             }else {    

                write(STDOUT_FILENO, buf, n);    

             }    

        }   

        close(sockfd);  

        return 0;  

    }

  • 相关阅读:
    下拉复选框
    tp mysql 去重
    前端面试准备2----Javascript中的Undefined和null小结
    前端面试准备1----JS中eval()解析和为什么不要使用eval
    点击一个按钮触发文件选择
    解决JS在url中传递参数时参数包含中文乱码的问题
    asp.net文件/大文件上传需要配置的项目整理
    网页元素位置、鼠标事件位置信息小结
    DOM事件总结
    学习require.js中的一些总结
  • 原文地址:https://www.cnblogs.com/sunnypoem/p/11782450.html
Copyright © 2011-2022 走看看