1 UDP通信编程
1.1 UDP相关函数介绍
(1)什么是socket?
· Linux内核提供的编程接口;
· Linux下的一种特殊的文件描述符
(2)四个常用函数
头文件
#include <sys/types.h>
#include <sys/socket.h>
函数原型
socket();//提供一个套接字
int socket(int domain, int type, int protocol);
·domain:指明了协议族/域,通常 AF_INET(ipv4), AF_INET6(ipv6), AF_LOCAL;
·type:套接字类型,主要 SOCK_STREAM(流式套接字,TCP), SOCK_DGRAM(数据报套接字,UDP), SOCK_RAW(原始socket);
·protocol:指定使用的是哪协议,一般取为0;
·返回值:成功时,返回一个小的非负整数值,与文件描述符类似;
bind();//绑定端口、ip地址
int bind(int fd, struct sockaddr *addr, socklen_t addrlen);
int bind(SOCKET s, const sockaddr *addr, int namelen);
·fd:socket函数生成的文件描述符
·addr:需要绑定fd使用的地址族结构体
·addrlen:地址族结构体的长度
·返回值:成功返回0;失败返回-1,设置errno
·struct sockaddr *addr
//IPV4的地址族结构体
struct sockaddr_in{
sa_family sin_family; //AF_INET
in_port_t sin_port; //端口号
struct in_addr sin_addr; //IP地址结构体
};
struct in_addr{uint32_t s_addr}; //IP地址
sendto();//发送数据
ssize_t sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);//flags取0
·buf:要发送的数据
·flags:默认设置为0
·dest_addr:目标地址族结构体
recefrom();//接受数据
ssize_t recvfrom(int fd, const void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t addrlen);//flags取0
·buf:要接收的数据
·flags:默认设置为0
·dest_addr:数据来源地址族结构体