面试题答案
一键面试服务端基本编程流程
- 创建套接字:使用
socket()
函数创建一个套接字描述符。例如在C语言中:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- 绑定地址:将套接字与特定的地址和端口绑定,使用
bind()
函数。以C语言为例:
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(SERVER_PORT);
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- 监听连接:调用
listen()
函数使套接字处于监听状态,等待客户端连接。如:
listen(sockfd, BACKLOG);
- 接受连接:使用
accept()
函数接受客户端的连接请求,返回一个新的套接字描述符用于与客户端通信。示例:
int connfd = accept(sockfd, (struct sockaddr *)NULL, NULL);
- 数据通信:通过新的套接字描述符
connfd
进行数据的发送和接收,使用send()
和recv()
等函数。例如发送数据:
send(connfd, buffer, strlen(buffer), 0);
接收数据:
recv(connfd, buffer, sizeof(buffer), 0);
- 关闭连接:通信结束后,使用
close()
函数关闭套接字。
close(connfd);
close(sockfd);
客户端基本编程流程
- 创建套接字:同服务端,使用
socket()
函数创建套接字描述符。
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- 连接服务器:使用
connect()
函数连接到服务器的指定地址和端口。
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(SERVER_IP);
servaddr.sin_port = htons(SERVER_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- 数据通信:与服务端类似,使用
send()
和recv()
等函数进行数据的发送和接收。 - 关闭连接:通信结束后,关闭套接字。
close(sockfd);