MST

星途 面试题库

面试题:C语言中Linux socket编程的基本步骤

请简述在Linux环境下使用C语言进行socket编程,实现一个简单的TCP服务器的基本步骤,并说明每个步骤中涉及的主要函数。
15.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 创建套接字
    • 主要函数socket()函数。
    • 描述:使用socket()函数创建一个套接字,它是网络通信的端点。例如,对于TCP服务器,通常创建流式套接字(SOCK_STREAM)。其原型为int socket(int domain, int type, int protocol);domain一般为AF_INET(IPv4),typeSOCK_STREAMprotocol通常为0。
  2. 绑定地址和端口
    • 主要函数bind()函数。
    • 描述:通过bind()函数将创建的套接字绑定到指定的IP地址和端口号。原型为int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd是之前创建的套接字描述符,addr是一个指向包含IP地址和端口号等信息的struct sockaddr结构体指针(对于IPv4一般使用struct sockaddr_in并进行转换),addrlenaddr结构体的长度。
  3. 监听连接
    • 主要函数listen()函数。
    • 描述:使用listen()函数使服务器套接字进入监听状态,等待客户端的连接请求。原型为int listen(int sockfd, int backlog);sockfd为服务器套接字描述符,backlog指定了等待连接队列的最大长度。
  4. 接受连接
    • 主要函数accept()函数。
    • 描述accept()函数用于接受客户端的连接请求。当有客户端连接时,它会返回一个新的套接字描述符,用于与该客户端进行通信。原型为int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd是处于监听状态的服务器套接字描述符,addr用于返回客户端的地址信息(如果不需要可设为NULL),addrlenaddr的长度。
  5. 数据通信
    • 主要函数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是要发送的数据缓冲区。
  6. 关闭套接字
    • 主要函数close()函数。
    • 描述:通信结束后,使用close()函数关闭套接字,释放资源。原型为int close(int fd);fd为要关闭的套接字描述符。