socket
socket是一套网络编程接口,类似于中间件;上层用户可以通过这些接口简单的完成网络通信传输,而不需要过于关心内部实现过程
udp协议:用户数据报协议—无连接、不可靠、面向数据报(无序、有最大长度限制的传输服务)
- 应用场景:实时性>安全性。例如:视频传输
tcp协议:传输控制协议—面向连接、可靠传输、面向字节流(有序,双向的字节流传输服务,不限制上层数据传输大小)
- 应用场景:安全性>实时性。例如:文件传输
网络通信:客户端和服务端主机之间的通信
- 客户端:主动发送请求的一方主机
- 服务端:被动接收请求的一方主机
udp编程
udp网络通信编程流程:
- 创建套接字:在内核中创建socket结构体,向用户返回一个操作句柄,通过这个内核中的socket结构体与网卡建立联系
- 为套接字绑定地址信息:向内核中的socket结构体添加源端(数据发送端)地址描述信息(ip地址和端口)。绑定地址就是为了告诉操作系统使用了哪个地址和端口接收到了数据
- 服务端接收数据:从socket结构体的接收缓冲区中将数据拷贝到用户态(每个数据中都包含源地址和目的地址,因此获取数据也就获悉了对端是谁)
客户端发送数据:把用户态数据拷贝到内核中的socket结构体的发送缓冲区中,并告诉socket对端地址,操作系统会根据socket绑定的源端地址信息和发送时赋予的对端信息,对数据进行层层封装,再通过网卡发送出去 - 关闭套接字,释放资源
udp套接字接口:
1.创建套接字:
int socket(int domain, int type, int protocol);
- domain:地址域—不同的网络地址结构 AF_INET–IPv4地址域
- type:套接字类型—流式套接字(有序的可靠的双向的基于连接的字节流传输)/数据报套接字(无连接不可靠有最大长度限制的传输)
- protocol:使用的协议 0—不同套接字类型下的默认协议;流式套接字默认是tcp/数据报套接字默认是udp
- 返回值:返回套接字的操作句柄—文件描述符
2.为套接字绑定地址信息:
int bind(int socket, const struct sockaddr* addr,socklen_t len);
- socket:创建套接字返回的操作句柄
- addr:要绑定的地址信息结构
- len:地址信息的长度
- 返回值:成功返回0,失败返回-1
3.发送数据:
ssize_t sendto(int sockfd,char* data,int data_len,int flag,