Linux系统编程(网络udp)

udp(用户数据报协议)

数据报

  1. 1.数据与数据之间有边界
  2. 2.发送和接收的次数要对应
  3. 3.没有写阻塞。发送太快,会导致数据丢失。
  4. 4.读阻塞。

**特性:**无连接,低延迟,网络资源使用率低。

服务端: 提供服务的一端, 1个。
**客户端:**使用服务的一端 。多个。

函数调用步骤

server:socket() =>bind()=>recvfrom()===>close()
client:socket()---sendto() -----close()

函数调用关系

cpp 复制代码
nt socket(int domain, int type, int protocol);
功能:程序向内核提出创建一个基于内存的套接字描述符
参数:domain 地址族,PF_INET == AF_INET ==>互联网程序
PF_UNIX == AF_UNIX ==>单机程序
type 套接字类型:
SOCK_STREAM 流式套接字 ===》TCP
SOCK_DGRAM 用户数据报套接字===>UDP
SOCK_RAW 原始套接字 ===》IP
protocol 协议 ==》0 表示自动适应应用层协议。
返回值:成功 返回申请的套接字id
失败 -1;
2、int bind(int sockfd, struct sockaddr *my_addr,
socklen_t addrlen);
功能:如果该函数在服务器端调用,则表示将参数1相关
的文件描述符文件与参数2 指定的接口地址关联,
用于从该接口接受数据。
sockfd, 需要被绑定 ip 和端口号的套接字
my_addr ipv4 对应的地址结构体,man 7 ip
struct _sockaddr_in ///网络地址结构
{
u_short sin_family; ////地址族
u_short sin_port; ///地址端口
struct in_addr sin_addr; ///地址IP
};
socklen_t addrlen: 参数2 的长度。
返回值:成功 0
失败 -1;
发送接收函数:
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:用于UDP协议中向对方发送数据。
参数:sockfd 本地的套接字id
buff 本地的数据存储,一般是要发送的数据。
len 要发送的数据长度
flags 要发送数据方式,0 表示阻塞发送。
dest_addr: 必选,表示要发送到的目标主机信息结构体。
addrlen :目标地址长度。
返回值:成功 发送的数据长度
失败 -1;
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:用于UDP协议中获取对方发送的数据。
参数:sockfd 本地的套接字id
buff 要存储数据的内存区,一般是数组或者动态内存。
len 要获取的数据长度,一般是buff的大小。
flags 获取方式,0 阻塞
src_addr 可选,表示对方的地址信息结构体,
如果为NULL,表示不关心对方地址。
addrlen 对方地址信息结构体大小。
如果对方地址是NULL,则该值也为NULL。
返回值:成功 接收到的数据长度
失败 -1;
相关推荐
源远流长jerry2 分钟前
RDMA Memory Region (MR) 机制详解:地址转换与内存保护
linux·服务器·网络·tcp/ip·架构·mr
c++逐梦人3 分钟前
Linux进程信号
linux·服务器
徐子元竟然被占了!!4 分钟前
ENSP学习-路由器
网络·学习
逸Y 仙X7 分钟前
文章九:ElasticSearch索引字段常见属性
java·大数据·服务器·数据库·elasticsearch·搜索引擎
9稳10 分钟前
基于plc的自动化立体仓库控制系统设计
开发语言·网络·数据库·嵌入式硬件·plc
lingran__12 分钟前
C语言预处理详解(C语言知识完结篇)
c语言·开发语言
野犬寒鸦14 分钟前
JVM垃圾回收机制深度解析(G1篇)(垃圾回收过程及专业名词详解)
java·服务器·jvm·后端·面试
清水白石00815 分钟前
协程不是线程:深入理解 Python async/await 运行机制
java·linux·python
va学弟15 分钟前
Java 网络通信编程(7):完善视频通信
java·服务器·网络
fengpan200416 分钟前
ubuntu下vscode使用串口
linux·运维·服务器