面试题答案
一键面试- 创建套接字:
- 主要函数:
socket()
函数。 - 描述:使用
socket()
函数创建一个套接字,它是网络通信的端点。例如,对于TCP服务器,通常创建流式套接字(SOCK_STREAM
)。其原型为int socket(int domain, int type, int protocol);
,domain
一般为AF_INET
(IPv4),type
为SOCK_STREAM
,protocol
通常为0。
- 主要函数:
- 绑定地址和端口:
- 主要函数:
bind()
函数。 - 描述:通过
bind()
函数将创建的套接字绑定到指定的IP地址和端口号。原型为int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
,sockfd
是之前创建的套接字描述符,addr
是一个指向包含IP地址和端口号等信息的struct sockaddr
结构体指针(对于IPv4一般使用struct sockaddr_in
并进行转换),addrlen
是addr
结构体的长度。
- 主要函数:
- 监听连接:
- 主要函数:
listen()
函数。 - 描述:使用
listen()
函数使服务器套接字进入监听状态,等待客户端的连接请求。原型为int listen(int sockfd, int backlog);
,sockfd
为服务器套接字描述符,backlog
指定了等待连接队列的最大长度。
- 主要函数:
- 接受连接:
- 主要函数:
accept()
函数。 - 描述:
accept()
函数用于接受客户端的连接请求。当有客户端连接时,它会返回一个新的套接字描述符,用于与该客户端进行通信。原型为int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
,sockfd
是处于监听状态的服务器套接字描述符,addr
用于返回客户端的地址信息(如果不需要可设为NULL
),addrlen
是addr
的长度。
- 主要函数:
- 数据通信:
- 主要函数:
read()
和write()
函数(也可以使用send()
和recv()
等)。 - 描述:通过
read()
函数从与客户端连接的套接字读取数据,原型ssize_t read(int fd, void *buf, size_t count);
,fd
是与客户端连接的套接字描述符,buf
是存储读取数据的缓冲区,count
是要读取的最大字节数。使用write()
函数向与客户端连接的套接字写入数据,原型ssize_t write(int fd, const void *buf, size_t count);
,参数含义与read()
类似,只是buf
是要发送的数据缓冲区。
- 主要函数:
- 关闭套接字:
- 主要函数:
close()
函数。 - 描述:通信结束后,使用
close()
函数关闭套接字,释放资源。原型为int close(int fd);
,fd
为要关闭的套接字描述符。
- 主要函数: