创建套接字:(TCP/UDP)
int socket(int domain, int type, int protocol);
inet_aton,将字符串IP转换成整数IP
int inet_aton(const char *cp, struct in_addr *inp);
监听套接字:(TCP,服务器)
int listen(int sockfd, int backlog);
TCP服务器在与客户端进行网络通信之前,服务器需要先获取到客户端的连接请求,获取连接的函数叫做accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数说明:
- sockfd:特定的监听套接字,表示从该监听套接字中获取连接。
- addr:对端网络相关的属性信息,包括协议家族、IP地址、端口号等。
- addrlen:调用时传入期望读取的addr结构体的长度,返回时代表实际读取到的addr结构体的长度,这是一个输入输出型参数
return val :
- 获取连接成功返回接收到的套接字的文件描述符,获取连接失败返回-1,同时错误码会被设置。
如何理解accept函数返回的套接字?
*
telnet 是一个基于网络的命令行工具,用于远程登录到另一台计算机
inet_ntop,将整数IP转换成字符串IP
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
-
af:地址族,指定要转换的地址类型。常见的值有 AF_INET(IPv4)和 AF_INET6(IPv6)。
-
src:指向包含原始网络地址的缓冲区的指针。
-
dst:指向目标缓冲区的指针,该缓冲区将接收转换后的文本表示。如果 dst 为 NULL,则 inet_ntop 将分配一个足够大的缓冲区,并返回指向该缓冲区的指针。
-
size:目标缓冲区的大小
建立连接:(TCP,客户端)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
inet_pton,将一个点分十进制的IP地址字符串转换为网络字节顺序的数值形式
int inet_pton(int af, const char *src, void *dst);
af:指定地址族,可以是 AF_INET(IPv4)或 AF_INET6(IPv6)。
src:指向一个以 null 结尾的字符串,包含要转换的IP地址。
dst:指向一个用于存储转换后的数值地址的缓冲区。
多进程版本关于sockfd
代码
单进程版本
多进程版本
线程版本