网络编程 使用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\n", 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\n", 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\n", ipver);
} n = sendto(sock, "bbbb\n", 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\n", 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\n");
}
printf("%s\n", buf);
close(sock);
return 0;
}

github源代码

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

本人微信:xiaoshitou5854

c/c++ 网络编程 使用getaddrinfo的单纯UDP 通信的更多相关文章

  1. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  2. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  3. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  4. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  5. [C# 网络编程系列]专题六:UDP编程

    转自:http://www.cnblogs.com/zhili/archive/2012/09/01/2659167.html 引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当 ...

  6. 网络编程之基于tcp和udp的套接字

    一   udp协议网络编程 DNS:将域名解析成ip地址 SOCK_DGRAM:数据报协议,也是udp协议 udp协议的网络编程的一些用法: recvfrom:接收消息,接收的时一个元组,元组里面的元 ...

  7. 网络编程、三要素、Socket通信、UDP传输、TCP协议、服务端(二十五)

    1.网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传 ...

  8. 网络编程模型及TCP、UDP编程设计

    1.Linux网络模型 Linux网络编程--->>>socket套接字的编程 2.TCP网络模型                                          ...

  9. python网络编程(Socket、TCP、UDP)

    Socket 是网络编程的一个抽象概念,通常我们用一个Socket表示 "打开了一个网络链接",而打开一个Socket 需要知道目标计算机的IP 地址和端口号,再指定协议类型即可. ...

随机推荐

  1. linux终端文本编辑神器vi的使用

    vi —— 终端中的编辑器 目标 vi 简介 打开和新建文件 三种工作模式 常用命令 分屏命令 常用命令速查图 01. vi 简介 1.1 学习 vi 的目的 在工作中,要对 服务器 上的文件进行 简 ...

  2. BBS论坛(二十九)

    29.帖子详情页布局 (1)front/hooks.py @bp.errorhandler def page_not_found(): return render_template('front/fr ...

  3. 前端(各种demo)一:css实现三角形,css实现梯形,pop弹层,css伪类before,after使用,svg使用(持续更新中)

    各种demo: 1.css实现正方形 思路:width为0:height为0:使用boder-width为正方形的边长的一半,不占任何字节:border-style为固体:border-color为正 ...

  4. AbstractQueuedSynchronizer源码分析(ReentrantLock锁的实现)

    1.  前言 Java中好多地方用到AbstractQueuedSynchronizer(PS:简称AQS),比如ReentrantLock.线程池,这部分在面试的时候也经常被问到,今天以Reentr ...

  5. C++中的to_string()函数[C++11支持]

    C++ -> 字符串库 -> std::basic_string 定义于头文件 std::string to_string(int value); (1) (C++11起) std::st ...

  6. 补习系列(5)-springboot- restful应用

    一.目标 了解 Restful 是什么,基本概念及风格: 能使用SpringBoot 实现一套基础的 Restful 风格接口: 利用Swagger 生成清晰的接口文档. 二.Restful 入门 什 ...

  7. scrapy爬虫学习系列七:scrapy常见问题解决方案

    1 常见错误 1.1 错误: ImportError: No module named win32api 官方参考:https://doc.scrapy.org/en/latest/faq.html# ...

  8. JDK源码分析(5)之 HashMap 相关

    HashMap作为我们最常用的数据类型,当然有必要了解一下他内部是实现细节.相比于 JDK7 在JDK8 中引入了红黑树以及hash计算等方面的优化,使得 JDK8 中的HashMap效率要高于以往的 ...

  9. web缓存策略之HTTP缓存大全

    一. web缓存总分类 数据库数据缓存 Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷.为了提供查询的性能,会将查询后的数据放到内 ...

  10. #12 Python函数

    前言 矩形的面积 S = ab,只要知道任一矩形的的长和宽,就可以带入上式求得面积.这样有什么好处呢?一个公式,适用于全部矩形,一个公式,重复利用,减少了大脑的记忆负担.像这类用变量代替不变量的思想在 ...