MST

星途 面试题库

面试题:C语言在Linux网络编程中如何实现简单的TCP服务器

请用C语言在Linux环境下编写一个简单的TCP服务器程序,要求能够监听指定端口,接收客户端连接,并向客户端发送一条固定的消息,例如'Hello, client!'。需要包含必要的头文件,错误处理等。
17.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>

#define PORT 8080
#define BUFFER_SIZE 1024
#define BACKLOG 5

void error_handling(const char *message) {
    perror(message);
    exit(1);
}

int main() {
    int serv_sock, clnt_sock;
    struct sockaddr_in serv_addr, clnt_addr;
    socklen_t clnt_addr_size;
    char message[BUFFER_SIZE] = "Hello, client!";

    // 创建套接字
    serv_sock = socket(PF_INET, SOCK_STREAM, 0);
    if (serv_sock == -1) {
        error_handling("socket() error");
    }

    // 初始化服务器地址结构体
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(PORT);

    // 绑定套接字到指定地址和端口
    if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {
        error_handling("bind() error");
    }

    // 监听连接
    if (listen(serv_sock, BACKLOG) == -1) {
        error_handling("listen() error");
    }

    clnt_addr_size = sizeof(clnt_addr);
    // 接受客户端连接
    clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
    if (clnt_sock == -1) {
        error_handling("accept() error");
    }

    // 向客户端发送消息
    write(clnt_sock, message, strlen(message));

    // 关闭套接字
    close(clnt_sock);
    close(serv_sock);

    return 0;
}