面试题答案
一键面试客户端
socket()
:- 作用:创建一个套接字描述符,指定协议族(如
AF_INET
表示IPv4)、套接字类型(如SOCK_STREAM
表示TCP流套接字)和协议(通常为0,表示使用默认协议)。 - 示例代码:
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
- 作用:创建一个套接字描述符,指定协议族(如
connect()
:- 作用:将套接字与服务器的地址和端口进行连接。它使用服务器的IP地址和端口号来尝试建立TCP连接。
- 示例代码:
sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(serverPort); inet_pton(AF_INET, serverIP.c_str(), &serverAddr.sin_addr); int connectResult = connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
服务器端
socket()
:- 作用:同客户端,创建一个套接字描述符,指定协议族、套接字类型和协议。
- 示例代码:
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
bind()
:- 作用:将套接字绑定到一个特定的IP地址和端口号上,使得服务器能够在该地址和端口监听客户端的连接请求。
- 示例代码:
sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(serverPort); serverAddr.sin_addr.s_addr = INADDR_ANY; int bindResult = bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
listen()
:- 作用:将套接字设置为监听模式,指定等待连接队列的最大长度。此时服务器开始监听客户端的连接请求。
- 示例代码:
int listenResult = listen(serverSocket, backlog);
,其中backlog
是等待连接队列的长度。
accept()
:- 作用:接受客户端的连接请求。它会阻塞直到有客户端连接过来,然后返回一个新的套接字描述符,用于与该客户端进行通信。
- 示例代码:
sockaddr_in clientAddr; socklen_t clientAddrLen = sizeof(clientAddr); int clientConnectionSocket = accept(serverSocket, (sockaddr*)&clientAddr, &clientAddrLen);