c/c++网络编程使用getaddrinfo的单纯UDP通信
来源:fromnet 网络用户发布,如有版权联系网管删除 2018-10-12
网络编程 使用getaddrinfo的单纯UDP
1,UDP发送端
2,UDP接收端
UDP发送端:
#include #include #include #include #include #include #include #include //getaddrinfoint main(int argc, char* argv[]){ int sock; addrinfo hints, *res; int err; int n; printf("argv[1]: %sn", 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: %sn", 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("%sn", ipver); } n = sendto(sock, "bbbbn", 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 #include #include #include #include #include #include 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:%sn", 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 failuren"); } printf("%sn", buf); close(sock); return 0;}
github源代码
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
查看评论 回复