网络编程:UDP编程笔记

1.字节序的概念和转换

小端格式: 低位字节数据存储在低地址
大端格式: 高位字节数据存储在低地址
在这里插入图片描述
在主机上时为小端存储,在网络上时为大端,所以接收到数据时,要转为小端口
如下图:
在这里插入图片描述
#include <arpa/inet.h>
发送者调用的函数:
uint32_t htonl(uint32_t hostlong); //转ip 将32位的主机字节序转换为 网络字符节
uint16_t htons(uint16_t hostshort); //转端口 将16位的主机字节序转换为 网络字符节

接收者者调用的函数:
uint32_t ntohl(uint32_t netlong); //转ip 将32位的网络字节序转换为 主机字符节
uint16_t ntohs(uint16_t netshort); //转端口 将16位的网络字节序转换为 主机字符节

2.IP地址转换

#include <arpa/inet.h>
点分十进制 转为 32位无符号整数
转换函数:
**int inet_pton(int af , const char src , void dst);
参数:
af : 转换的协议
AF_INET (IPv4)
AF_INET6 (IPv6)
src : 点分十进制数串的首元素地址
dst : 4字节的IP地址
返回值: 成功 1 失败 -1

32位无符号整数 转为 点分十进制
**const char *inet_ntop(int af , const void src , char dst, socklen_t size);
参数:
af : 转换的协议, 如 AF_INET (IPv4) AF_INET6 (IPv6)
src :4字节的IP地址的起始地址
dst :存放点分十进制数串的起始地址
size:点分十进制数串的最大长度
#define INET_ADDRSTRLEN 16 //for ipv4
#define INET6_ADDRSTRLEN 46 //for ipv6
返回值: 成功则返回字符串的首地址; 失败则返回NULL

UDP编程

发送方:

  // 创建socket
// 创建 地址结构体 sockaddr_in   
// 准备 数据
// 发送 sendto()

ssize_t sendto(int sockfd,const void * buf,size_t nbytes, int flags,const struct sockaddr *to, socklen_t addrlen)

参数:
sockfd:套接字
buf: 发送数据缓冲区
nbytes: 发送数据缓冲区的大小
flags:一般为 0
to:指向目的主机地址结构体的指针
addrlen:to 所指向内容的长度

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值