MST

星途 面试题库

面试题:网络编程中Socket编程的基本流程是什么

请简述在基于TCP协议的Socket编程中,服务端和客户端各自的基本编程流程,包括涉及的主要函数及操作步骤。
21.0万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

服务端基本编程流程

  1. 创建套接字:使用 socket() 函数创建一个套接字描述符。例如在C语言中:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  1. 绑定地址:将套接字与特定的地址和端口绑定,使用 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));
  1. 监听连接:调用 listen() 函数使套接字处于监听状态,等待客户端连接。如:
listen(sockfd, BACKLOG);
  1. 接受连接:使用 accept() 函数接受客户端的连接请求,返回一个新的套接字描述符用于与客户端通信。示例:
int connfd = accept(sockfd, (struct sockaddr *)NULL, NULL);
  1. 数据通信:通过新的套接字描述符 connfd 进行数据的发送和接收,使用 send()recv() 等函数。例如发送数据:
send(connfd, buffer, strlen(buffer), 0);

接收数据:

recv(connfd, buffer, sizeof(buffer), 0);
  1. 关闭连接:通信结束后,使用 close() 函数关闭套接字。
close(connfd);
close(sockfd);

客户端基本编程流程

  1. 创建套接字:同服务端,使用 socket() 函数创建套接字描述符。
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  1. 连接服务器:使用 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));
  1. 数据通信:与服务端类似,使用 send()recv() 等函数进行数据的发送和接收。
  2. 关闭连接:通信结束后,关闭套接字。
close(sockfd);