zoukankan      html  css  js  c++  java
  • c/c++ 网络编程 使用getaddrinfo的单纯UDP 通信

    网络编程 使用getaddrinfo的单纯UDP

    1,UDP发送端

    2,UDP接收端

    UDP发送端:

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    #include <netdb.h>//getaddrinfo
    
    int main(int argc, char* argv[]){
      int sock;
      addrinfo hints, *res;
      int err;
      int n;
      printf("argv[1]: %s
    ", argv[1]);
      if(argc !=2)return 1;
    
      //IP地址和网站都可以识别
      memset(&hints, 0, sizeof(hints));
      hints.ai_family = AF_UNSPEC;///IP地址和网站都可以识别
      hints.ai_socktype = SOCK_DGRAM;
      err = getaddrinfo(argv[1], "12345", &hints, &res);
      if(err != 0){
        printf("getaddrinfo: %s
    ", gai_strerror(err));
      }
    
      sock = socket(res->ai_family, res->ai_socktype, 0);
      if(sock < 0){
        perror("socket");
        return 1;
      }
      
      {
        const char* ipver;
        switch(res->ai_family){
        case AF_INET:
          ipver = "IPv4";
        case AF_INET6:
          ipver = "IPv6";
        default:
          ipver = "unknown";
        }
        printf("%s
    ", ipver);
      }
    
      n = sendto(sock, "bbbb
    ", 5, 0, res->ai_addr, res->ai_addrlen);
      if(n < 0){
        perror("sendto");
        return 1;
      }
      close(sock);
      freeaddrinfo(res);
    
      return 0;
    }
    
    

    github源代码

    发送端的执行方式:

    ./a.out 127.0.0.1
    

    UDP接收端

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <string.h>
    #include <netdb.h>
    
    int main(){
      int sock;
      addrinfo hints, *res;
      int err,n;
      char buf[2048];
    
      memset(&hints, 0, sizeof(hints));
      hints.ai_family = AF_INET;
      hints.ai_socktype = SOCK_DGRAM;
      hints.ai_flags = AI_PASSIVE;
      err = getaddrinfo(NULL,"12345", &hints, &res);
      if(err != 0){
        printf("getaddrinfo:%s
    ", gai_strerror(err));
        return 1;
      }
    
      sock = socket(res->ai_family, res->ai_socktype, 0);
      if(sock < 0){
        perror("socket");
        return 1;
      }
      if(bind(sock, res->ai_addr, res->ai_addrlen) != 0){
        perror("bind");
        return 1;
      }
    
      freeaddrinfo(res);
      memset(buf, 0, sizeof(buf));
      n = recv(sock, buf, sizeof(buf), 0);
      if(n < 0){
        printf("recv failure
    ");
      }
      printf("%s
    ", buf);
      close(sock);
      return 0;
    }
    
    

    github源代码

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    jeesite导入导出
    jeesite下载
    百度echart
    js获取日期
    清除svn
    父子窗口
    JS高级程序设计之高级技巧
    JS中离线应用与客户端存储
    JS最佳实践
    JSON之JS高级程序设计笔记
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9776066.html
Copyright © 2011-2022 走看看