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);
    }


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

  • 相关阅读:
    Netty入门——客户端与服务端通信
    使用配置文件自定义Ribbon配置
    使用Java代码自定义Ribbon配置
    Spring Cloud Ribbon入门
    负载均衡简介
    常见的几种负载均衡算法
    Eureka编程
    Eureka多机高可用
    Maven项目打包成可执行Jar文件
    Eureka单机高可用伪集群配置
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4603080.html
Copyright © 2011-2022 走看看