MST

星途 面试题库

面试题:网络编程之中等难度TCP协议与Socket编程题

在TCP的Socket编程中,描述一下服务器端从创建Socket到开始监听连接的完整流程,并指出每一步可能出现的错误及如何处理。
30.4万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 创建Socket
    • 流程:使用socket函数创建一个套接字。在C语言中,示例代码如下:
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
    • 可能错误
      • socket函数可能返回-1,表示创建失败。错误原因可能是地址族不支持、协议不支持等。
    • 处理方式
      • 使用perror函数打印错误信息,然后根据具体情况进行处理,比如退出程序或者尝试其他地址族或协议。示例:
      if (sockfd == -1) {
          perror("socket creation failed");
          exit(EXIT_FAILURE);
      }
      
  2. 绑定地址和端口
    • 流程:使用bind函数将创建的套接字绑定到指定的地址和端口。在C语言中,示例代码如下:
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(SERVER_PORT);
    servaddr.sin_addr.s_addr = INADDR_ANY;
    if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
        // 错误处理
    }
    
    • 可能错误
      • bind函数返回-1,可能原因是地址已被占用、端口号非法、权限不足等。
    • 处理方式
      • 同样使用perror打印错误信息。如果是地址被占用,可以尝试更换端口号;如果是权限问题,需要以管理员权限运行程序等。
  3. 开始监听连接
    • 流程:使用listen函数将套接字设置为监听状态,准备接受客户端连接。在C语言中,示例代码如下:
    if (listen(sockfd, BACKLOG) == -1) {
        // 错误处理
    }
    
    • 可能错误
      • listen函数返回-1,可能原因是套接字未处于正确状态(如未绑定)等。
    • 处理方式
      • 通过perror打印错误信息,检查之前步骤是否正确执行,如是否成功绑定地址和端口等,然后进行相应修正。