操作系统提供,用于开发网络应用的一系列API函数接口,可以称为套接字函数,所有的系统平台都有对SOCKET套接字的兼容和实现
虽然网络环境中有大量的协议类型,但是绝大多数协议都是采用TCP和UDP,也就是说很多软件或网站的访问与链接一样使用套接字
在Linux平台所有的设备都会抽象成一个文件,得到该设备的文件描述符就可以访问使用设备了,在linux下socket是整型(sockfd 描述符)
网络信息结构体
* 包含了socket相关的网络信息,IP,PORT,协议类型
struct sockaddr_in addr 网络信息结构体
addr_sin_family = AF_INET(ipv4) / AF_INET6(ipv6)
addr.sin_port = 存储大端序端口号(16)
addr.sin_addr.s_addr = 存储大端序IP(32)
常用的大小端转换函数
htons() *小端转大端端口号
htonl() *小端转大端ip
ntohs() *大端转小端端口
ntohl() *大端转小端IP
inet_pton(AF_INET,“402.41.2.152”,addr.sin_addr.s_addr )*字符串IP转大端序IP
inet_ntop(AF_INET, addr.sin_addr.s_addr,ip,sizeof(ip)) *大端序转字符串IP,存到数据中
常用套接字函数
int sockfd = socket(AF_INET,SOCK_STREAM|SOCK_DGRAM,int protocal) * 根据需求创建tcp或udp socket
int bind(int sockfd,struct sockaddr * addr, socklen_t addrlen) * 绑定,可以让socket与特定的网络信息进行绑定,修改socket中的IP和端口
ilisten(int sockfd, int backlog) * 监听函数,用于TCP协议,用户监听连接过程,持续监听此网络的网络消息和事件
int client_fd = accept(int serverfd, struct sockaddr* client_addr, socklen_t* addrlen) * 服务端/被动端,调用阻塞等待客户端请求三次握手,该函数可以完成三次握手,连接成功,交互数据
int reval = connect(int mysock,struct sockaddr* serveraddr, socklen_t addrlen); * 客户端/主动端执行,请求TCP连接(三次握手)
recv() send() * TCP的常用读写接口
recvfrom() sendto() *UDP的常用读写接口
接收网络信息大小addrlen = sizeof(struct sockaddr)