记录自己学习,如果对你有帮助,可以一起学习进步,太多要用的函数了,记不住根本记不住,基本上是TCP、UDP之间的通信相关的一些函数
目录
1、htonl、htons:主机字节序和网络字节序的相互转换函数
5、socket函数:为通信创建一个端点,并返回该端点的文件描述符
6、bind函数:将一个套接字绑定到特定的网络地址和端口号上
7、listen函数:将套接字设置成被动监听状态,接受客户端的连接请求
9、connect:将套接字文件描述符连接到addr指向的地址空间中
12、sendto:向套接字文件描述符中读取数据,写给指定的对端接收
13、recvfrom:从套接字文件描述符中读取数据,并将对端地址信息结构体接收
14、getsockopt、setsockopt套接字属性的获取和设置
1、htonl、htons:主机字节序和网络字节序的相互转换函数
函数原型:
1、uint32_t htonl(uint32_t hostlong); //将4字节无符号整数的主机字节序转换为网络字节序,参数是主机字节序,返回值是网络字节序
2、uint16_t htons(uint16_t hostshort); //将2字节无符号整数的主机字节序转换为网络字节序,参数是主机字节序,返回值是网络字节序
功能:将主机字节序转换成网络字节序
2、ntohl、ntohs:网络字节序转换成主机字节序
函数原型:
1、uint32_t ntohl(uint32_t netlong); //将4字节无符号整数的网络字节序转换为主机字节序,参数是网络字节序,返回值是主机字节序
2、uint16_t ntohs(uint16_t netshort); //将2字节无符号整数的网络字节序转换为主机字节序,参数是网络字节序,返回值是主机字节序
功能:将网络字节序转换成主机字节序
3、inet_addr:将点分十进制转换成网络字节序
函数原型:
in_addr_t inet_addr(const char *cp);
功能:将点分十进制转换成网络字节序
参数:点分十进制
返回值:网络字节序
4、inet_ntoa:将网络字节序转换成点分十进制
函数原型:
char *inet_ntoa(struct in_addr in);
功能:将网络字节序转换成点分十进制
参数:网络字节序
返回值:点分十进制
5、socket函数:为通信创建一个端点,并返回该端点的文件描述符
函数原型:
int socket(int domain, int type, int protocol);
功能:为通信创建一个端点,并返回该端点的文件描述符
参数1:通信域
AF_UNIX, AF_LOCAL 本地通信,同一主机之间进程通信 详情请看man 7 unix
AF_INET IPv4 提供的网络通信 详情请看man 7 ip
AF_INET6 IPv6 提供的网络通信 详情请看man 7 ipv6
参数2:指定通信语义,可以由多个宏值使用位或连接
SOCK_STREAM:表示提供TCP协议的传输方式
SOCK_DGRAM:表示提供UDP协议的传输方式
SOCK_NONBLOCK:套接字设置非阻塞属性
参数3: 如果参数2中仅仅指定一个协议,那么参数3可以填0,如果指定多个,则参数3需要指定特定的协议
TCP协议名称:IPPROTO_TCP
UDP协议名称:IPPROTO_UDP
例子:
int sfd = socket(AF_INET, SOCK_STREAM, 0);
//参数1:表示ipv4的网络通信
//参数2:表示使用的是TCP通信方式
//参数3:表示默认使用一个协议
返回值:成功返回创建的套接字文件描述符,失败返回 -1并置位错误码