udp通信
服务端
1.创建套接字
在内核中创建socket结构体
2.为套接字绑定地址信息
在socket结构体中描述IP地址和端口以及协议信息
为了告诉操作系统,我该发往哪个IP地址,哪个端口信息交给我处理。
3.接收数据
第二步过后,操作系统收到该发往该Ip地址和端口,会将数据放到对应的socket接受消息缓冲区。接受即是从中取出数据
4.发送数据
将数据写入内核中的socket发送消息缓冲区,操作系统选择合适时机发送。
5.关闭套接字
客户端
1.创建套接字
2.为套接字绑定地址信息,将IP地址以及端口号存到socket结构体中,发送的地址信息就是源端地址信息
3.发送数据:将数据放到消息缓冲区中,操作系统选择合适时间发送,若socket没有绑定地址信息,操作系统会选择合适的地址办绑定。
4.接收数据。
5.关闭套接字。
socket接口介绍
1.创建套接字
int socket(int domain , int type, int protocol)
//domain:地址域-确定本次socket使用哪种协议版本进行通信,不同版本之间的地址结构不同,——AF_INET IPV4的网络协议。
//type:套接字类型(流式套接字SOCK_STREAM / 数据报套接字SOCK_DGRAM)
//protocol:协议类型(通常为IPPROTO_TCP/ IPPROTO_UDP)默认为0-流式默认tcp/数据报默认udp返回值。
返回值:文件描述符-非负整数-套接字所有其他接口的操作句柄,失败返回-1。
2.为套接字绑定信息
int bind (int sockfd , struct sockaddr* addr , socklen_t len);
//sockfd:socket的返回值,即创建套接字的操作句柄
//addr:要绑定的地址信息
struct sockddr
{
sa_family_t sin_family;地址域
in_port_t sin_port;端口号
struct in_addr{in_addr_t s_addr}sin_addr;IP地址
}
//len:要绑定的地址信息长度
3.接收数据(接收数据的同时,通过接收得知数据来源,得到发送地址信息)
sszie_t recvfrom(int sockfd , char* buf , int len ,int flag, struct ockaddr* peer_addr , socklen_t addrlen)
//sockfd:创建套接字的操作句柄
//buf:缓冲区,存放需要接收的数据,
//len: 接收数据的长度
//flag:默认为0,为阻塞操作
//peer_addr:接收数据的地址信息
//addlen:需要获取的地址长度,以及实际返回的长度
返回值:成功返回实际收到的长度,失败返回1;
4.发送数据
ssize_t sendto(int sockfd,char* data,int len,int flag,struct sockaddr *peer_addr,socklen_t addrlen)
//sockfd:创建套接字的操作句柄
//data为需要发送的数据首地址
//len:需要发送的长度
//flag:表示阻塞操作的返回值
//peer_add:接收方的地址信息
//addrlen:地址信息长度
5.关闭套接字
int close(int fd)
接口实现