zoukankan      html  css  js  c++  java
  • unix域套接字UDP网络编程

    unix域套接字UDP网络编程,服务器如下面:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <sys/un.h>
    
    #define SA struct sockaddr
    #define PATHNAME "/tmp/unixudp"
    
    void err_sys(const char *errmsg);
    
    int main(void)
    {
        int sockfd;
        struct sockaddr_un servaddr, cliaddr;
        char buf[BUFSIZ];
        ssize_t n;
        socklen_t len = sizeof(cliaddr);
    
        if ((sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0)) == -1)
            err_sys("socket");
    
        bzero(&servaddr, sizeof(servaddr));
        unlink(PATHNAME);
        servaddr.sun_family = AF_LOCAL;
        strncpy(servaddr.sun_path, PATHNAME, sizeof(servaddr.sun_path) - 1);
    
        if (bind(sockfd, (SA *)&servaddr, sizeof(servaddr)) == -1)
            err_sys("bind");
    
        for(;;){
            n = recvfrom(sockfd, buf, sizeof(buf), 0, (SA *)&cliaddr, &len);
            if (n == -1)
                err_sys("recvfrom");
            else
                printf("%s
    ", buf);
    
            if (sendto(sockfd, buf, n, 0, (SA *)&cliaddr, sizeof(cliaddr)) != n)
                err_sys("sendto");
    
        }
        exit(0);
    }
    
    void err_sys(const char *errmsg)
    {
        perror(errmsg);
        exit(1);
    }

    client程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <sys/un.h>
    
    #define SA struct sockaddr
    #define PATHNAME "/tmp/unixudp"
    
    void err_sys(const char *errmsg);
    
    int main(void)
    {
        int sockfd;
        struct sockaddr_un servaddr, localaddr;
        char buf[BUFSIZ], s[] = "hello china";
        ssize_t n;
    
        if ((sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0)) == -1)
            err_sys("socket");
    
        bzero(&localaddr, sizeof(localaddr));
        localaddr.sun_family = AF_LOCAL;
        strncpy(localaddr.sun_path, tmpnam(NULL), sizeof(localaddr.sun_path) - 1);
    
        if (bind(sockfd, (SA *)&localaddr, sizeof(localaddr)) == -1)
            err_sys("bind");
    
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sun_family = AF_LOCAL;
        strncpy(servaddr.sun_path, PATHNAME, sizeof(servaddr.sun_path) - 1);
    
        for(;;){
            if (sendto(sockfd, s, strlen(s), 0, (SA *)&servaddr, sizeof(servaddr)) == -1)
                err_sys("sendto");
            if ((n = read(sockfd, buf, sizeof(buf))) == -1)
                err_sys("read");
            else 
                printf("%s
    ", buf);
            usleep((rand() % 10) * 10000);
        }
    
        exit(0);
    }
    
    void err_sys(const char *errmsg)
    {
        perror(errmsg);
        exit(1);
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Gin框架系列02:路由与参数
    Gin框架系列01:极速上手
    Go语言库系列之email
    Go语言库系列之aurora
    Go语言库系列之dotsql
    Go语言库系列之flag
    Go解算法07整数反转
    Go语言micro之快速搭建微服务
    理解Golang组件protobuf
    理解Go语言组件flag
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4603080.html
Copyright © 2011-2022 走看看