socket编程
socket编程接口:
1 创建套接字:int socket(int domain,int type,int protocol)
(地址域,套接字类型,协议类型)
2 绑定地址信息:int bind(int sockfd,int sockaddr* addr,socklen_t len)
(描述符,地址信息结构,地址信息长度)
3 字节序的转换:uint32_t htonl(uint32_t)
将四字节的主机序转换为网络字节序/uint32_t ntohl(uint32_t)
将四字节的网络字节序转换为主机序uint16_t htonl(uint16_t)
将2字节的主机序转换为网络字节序/uint16_t ntohl(uint16_t)
inet_ntop(int domain,void *src,char *dst,int len)
(地址域,网络字节序IP,字符串缓冲区,缓冲区长度)
根据地址域将网络字节序IP地址转换为字符串IP地址inet_pton(int domain,char *src,void *dst
( 地址域,字符串IP地址,网络字节序IP地址缓冲区
根据地址域将字符串IP地址转换为网络字节序IP地址
4 发送数据:ssize_t sendto(int sockfd,char *data,int dlen,int flag,struct sockaddr* addr,socklen_t addrlen)
(描述符,要发送的数据,数据长度,选项参数,对端地址信息,地址信息长度)
5 接收数据ssize_t recvfrom(int sockfd,char *buf,int dlen,int flag,structaddr* addr,socklen_t* addrlen)
(描述符,接收数据缓冲区,数据长度,选项参数,对端地址信息,地址长度)
4 关闭套接字 int close(int fd)
客户端与服务端绑定地址信息的去别:
套接字有一个功能,就只在描述源端地址信息的时候,发现sorcket还没有绑定端口,就在操作系统上选择一个端口进行绑定
服务端必须主动绑定地址信息,客户的可以不主动绑定
TCP协议:
最新创建的套接字永远只接收新的连接请求,后面创建的套接字用于通信(监听套接字/通信套接字)
服务端:1.创建套接字2.为套接字绑定地址信息3.开始监听4.服务端程序获取新创建套接字的操作句柄5.接收/发送数据6.关闭套接字
客户端流程:1.创建套接字2.为套接字绑定地址信息3.向服务端发送连接请求4.接收/发送数据5.关闭套接字
接口:
1.创建套接字int socket(int domain,int type,int protocol)
(地址域AF-INT,套接字类型SOCK-STREAM,协议类型IPPROTO-TCP)
2.绑定地址信息:int bind(int sockfd,sockaddr* addr,socklen-t len)
3.监听接口int listen(int sockfd,int backlog)
backlog --内核中tcp连接pending队列最大节点数,决定同一时刻服务端所能接收的客户端的连接请求4.服务端程序获取新创建套接字socket的操作句柄
int accept(int sockfd,struct sockaddr* addr,socklen_t len)
功能就是从已连接队列里获取socket,腾出位置建立新连接
sockfd指定要获取那一个socket套接字
addr客户端地址信息
len指定想要获取的地址信息的长度,以及实际获取的地址信息的长度
5.接收/发送数据int recv(int sockfd,char* buf,int len,int flag)
len-数据长度 flag选项参数int send(int sockfd,char* data,int len,int flag