1.1 udp协议:用户数据报协议
特性:无连接,不可靠,面向数据报
应用场景:实时性要求大于安全性要求的场景。
1.2 tcp协议:传输控制协议
特性:面向连接,可靠传输,面向字节流
应用场景:安全性要求大于实时性要求的场景。
1.3在网络通信程序中,通信两端被分为:客户端、服务端。
客户端是主动发送请求的一端,也意味着客户端必须提前能够知道服务端的地址信息(ip+port)。服务端的地址信息通常是固定的,并且是提前提供给客户端的。
2.1 server:
2.1.1 创建套接字:在内核中创建一个socket结构体
int socket(int domain, int type,int porotocol);
domain:地址域类型——AF_INET:IPV4通信,使用IPV4 的地址结构
type:套接字类型:SOCK_STREAM ; SOCK_DGRAM
porotocol:本次协议类型:IPPROTO_TCP:6;IPPROTO_UDP:17
TCP必须使用SOCK_STREAM;UDP必须使用SOCK_DGRAM。
2.1.2 为套接字绑定地址信息:在创建套接字创建的socket结构体中加入IP+port信息。
int bind(int sockfd,struct sockaddr *addr,socklen_t addrlen);
sockfd:创建套接字返回的操作句柄。
addr:当前绑定的地址信息。
addrlen:地址信息长度。
返回值:成功返回0;失败返回-1。
2.1.3 接收数据:当前进程从指定的socket接收缓冲区中取出数据。
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flag,struct sockaddr *srcaddr,socklen_t *addrlen);
sockfd:操作句柄;
buf:空间地址,用于存放接收的数据;
len:要接收的地址长度;
flag:选项标志,默认为0,表示接收阻塞;
srcaddr:本条数据的源端;
addrlen:输入输出参数——指定要接收多长的地址结构,并且返回实际接收的地址数据长度。
返回值:成功返回实际接收到的数据长度;失败返回-1。
2.1.4 发送数据:将要发送的数据放到socket发送缓冲区中,内核选择合适的时候封装发送。
ssize_t sendto(int sockfd,void *data,int len,int flag,struct sockaddr *peeraddr,socklen_t *addrlen);
sockfd:操作句柄;
data:要发送的数据的空间首地址;
len:要发送的数据长度;
flag:选项标志,默认为0,表示接收阻塞;
srcaddr:对端地址信息;
addrlen:地址结构长度。
返回值:成功返回实际发送到的数据长度;失败返回-1。
2.1.5 关闭套接字
int close(int fd);
2.2 client:
2.2.1 创建套接字:在内核中创建一个socket结构体
2.2.2 为套接字绑定地址信息:大部分情况下忽略这一步,在发送数据时,若socket没有绑定地址时,系统会选择合适的地址进行绑定。
2.2.3 发送数据
2.2.4 接收数据
2.2.5 关闭套接字