MST

星途 面试题库

面试题:C语言在Linux网络编程中如何实现简单的TCP客户端

请用C语言编写一个在Linux环境下的简单TCP客户端程序,要求能够连接到指定服务器IP和端口,并发送一条简单消息,如'Hello, Server!',描述清楚各个函数调用的作用及网络编程相关结构体的使用。
27.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

#define PORT 8080  // 服务器端口号
#define SERVER_IP "127.0.0.1"  // 服务器IP地址
#define BUFFER_SIZE 1024

int main(int argc, char const *argv[]) {
    int sockfd;
    struct sockaddr_in servaddr;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 初始化服务器地址结构体
    memset(&servaddr, 0, sizeof(servaddr)); 
    memset(servaddr.sin_zero, '\0', sizeof servaddr.sin_zero); 

    // 设置地址族、端口号和IP地址
    servaddr.sin_family = AF_INET; 
    servaddr.sin_port = htons(PORT); 
    servaddr.sin_addr.s_addr = inet_addr(SERVER_IP); 

    // 连接到服务器
    if (connect(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { 
        perror("connect failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    char buffer[BUFFER_SIZE] = "Hello, Server!";
    // 发送消息到服务器
    send(sockfd, buffer, strlen(buffer), 0); 
    printf("Message sent to server: %s\n", buffer);

    // 关闭套接字
    close(sockfd); 
    return 0;
}

函数调用作用

  1. socket:创建一个套接字。AF_INET 表示使用IPv4协议,SOCK_STREAM 表示使用TCP协议,最后一个参数 0 表示默认协议。成功时返回套接字描述符,失败返回 -1
  2. memset:用于初始化 servaddr 结构体,将其内存区域清零。
  3. inet_addr:将点分十进制的IP地址字符串转换为网络字节序的32位IP地址。
  4. connect:将套接字连接到服务器指定的地址和端口。成功返回 0,失败返回 -1
  5. send:将数据发送到已连接的套接字。第一个参数是套接字描述符,第二个参数是要发送的数据,第三个参数是数据长度,最后一个参数是标志位,通常设为 0
  6. close:关闭套接字,释放相关资源。

网络编程相关结构体

  1. struct sockaddr_in:这是用于IPv4的套接字地址结构体。
    • sin_family:地址族,通常设为 AF_INET
    • sin_port:端口号,需要使用 htons 函数将主机字节序转换为网络字节序。
    • sin_addr:IP地址,通过 inet_addr 函数转换为网络字节序。
    • sin_zero:填充字段,通常设为 0