欢迎访问宙启技术站
智能推送

实用函数大全:网络相关函数解析

发布时间:2023-06-12 13:23:02

网络相关函数常见于实际开发中的网络编程中,用于实现网络通信、套接字编程等功能,非常重要。下面是一些常用的网络相关函数的解析:

1. socket() 函数

函数原型:int socket(int domain, int type, int protocol);

功能:创建套接字,返回套接字描述符。

参数:

domain:套接字协议簇,常见的有AF_INET(IPv4协议)、AF_INET6(IPv6协议)、AF_UNIX(本地IPC协议)等。

type:套接字类型,常见的有SOCK_STREAM(流协议,如TCP)、SOCK_DGRAM(数据报协议,如UDP)等。

protocol:具体的协议,常见的有IPPROTO_TCP、IPPROTO_UDP等。

2. bind() 函数

函数原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:将一个本地协议地址绑定到一个套接字描述符。

参数:

sockfd:套接字描述符。

addr:本地协议地址指针,包括协议簇、IP地址、端口号等信息。

addrlen:协议地址长度。

3. listen() 函数

函数原型:int listen(int sockfd, int backlog);

功能:将套接字标记为被动,等待连接请求。

参数:

sockfd:套接字描述符。

backlog:等待连接队列的最大长度。

4. accept() 函数

函数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:接受客户端连接请求,返回新的套接字描述符。

参数:

sockfd:套接字描述符。

addr:用于存放客户端地址信息。

addrlen:addr结构体的大小,调用前初始化为分配的空间大小。

5. connect() 函数

函数原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:连接到服务器。

参数:

sockfd:套接字描述符。

addr:服务器协议地址指针,包括协议簇、IP地址、端口号等信息。

addrlen:协议地址长度。

6. send()/sendto() 函数

函数原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

功能:发送数据到另一个套接字。

参数:

sockfd:套接字描述符。

buf:指向要发送的数据的指针。

len:发送数据的字节数。

flags:标志位,如MSG_CONFIRM 等。

dest_addr:如果使用sendto()函数,则指定目标地址,一般为服务端地址。

addrlen:目标地址长度。

7. recv()/recvfrom() 函数

函数原型:ssize_t recv(int sockfd, void *buf, size_t len, int flags);

 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

功能:接收来自另一个套接字的数据。

参数:

sockfd:套接字描述符。

buf:用于存放接收到的数据的指针。

len:缓冲区长度。

flags:标志位,如MSG_DONTWAIT 等。

src_addr:如果使用recvfrom()函数,则指向发送端地址。

addrlen:如果使用recvfrom()函数,则指向发送端地址长度。

8. getaddrinfo() 函数

函数原型:int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);

功能:获取指定协议族和套接字类型下的套接字地址列表。

参数:

node:指定主机名或IP地址。

service:指定服务名或端口号。

hints:指定一些条件。

res:存放获取的地址信息结构体(addrinfo)。

9. inet_ntoa() 函数

函数原型:char *inet_ntoa(struct in_addr in);

功能:将IP地址结构体转换为点分十进制字符串。

参数:

in:IPv4地址结构体。

10. inet_pton() 函数

函数原型:int inet_pton(int af, const char *src, void *dst);

功能:将点分十进制字符串转换成网络字节顺序的整数值。

参数:

af:地址族,如AF_INET等。

src:待转换的字符串。

dst:指向存储转换后的二进制值的指针。

11. htons()/ntohs() 函数

函数原型:uint16_t htons(uint16_t hostshort);

 uint16_t ntohs(uint16_t netshort);

功能:将16位主机字节序(intel等)转换成16位网络字节序(big-endian),或将16位网络字节序(big-endian)转换成16位主机字节序(intel等)。

参数:

hostshort:待转换的16位主机字节序整数值。

netshort:待转换的16位网络字节序整数值。

总结:网络编程中常用的函数很多,最基本的就是创建套接字和套接字间的通信。需要注意的是网络字节序和主机字节序的转换,以及IP地址的格式转换。了解这些函数的使用,能够更好地理解网络编程的原理和实现。