使用C语言构建简易TCP回声服务器:源码、编译与测试详解

Leo
Leo
发布时间:2026-10-16 | 4人浏览过
原创

本文将演示如何利用C语言的Socket API构建一个简单的TCP回声服务器。内容涵盖完整的源代码解析、使用GCC编译器生成可执行文件的方法,以及如何通过Telnet工具进行本地连接测试与回显功能验证。

1. 实现原理与准备

回声服务器(Echo Server)的核心逻辑非常简单:服务器端持续监听特定端口,当客户端发起连接请求时,接收数据并将其原样发送回客户端。在C语言中,这通常涉及 sys/socket.h 和 arpa/inet.h 等系统头文件的使用。我们需要确保环境中已安装GCC编译器。

2. 编写服务器源代码

新建一个名为 echo_server.c 的文件,并将以下代码写入其中。该代码实现了非阻塞式的单线程处理逻辑(仅为演示结构,未包含实际的数据收发循环,仅处理连接建立):

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <ctype.h>
#include <arpa/inet.h>

#define SERVER_PORT 666

int main(void){
    int sock;
    struct sockaddr_in server_addr;

    // 1. 创建 socket 套接字
    sock=socket(AF_INET,SOCK_STREAM,0);

    // 2. 初始化服务器地址结构
    bzero(&server_addr,sizeof(server_addr));
    server_addr.sin_family=AF_INET;
    server_addr.sin_addr.s_addr=htonl(INADDR_ANY); // 绑定所有可用IP
    server_addr.sin_port=htons(SERVER_PORT);        // 设置端口为 666

    // 3. 绑定 socket 到地址和端口
    bind(sock,(struct sockaddr *)&server_addr,sizeof(server_addr));

    // 4. 设置监听队列长度
    listen(sock,128);

    printf("等待客户端的连接..\n");

    int done=1;
    while(done){
        struct sockaddr_in client;
        int client_sock;
        char client_ip[64];
        socklen_t client_addr_len;
        
        client_addr_len=sizeof(client);
        
        // 5. 接受客户端连接
        accept(sock,(struct sockaddr *)&client,&client_addr_len);
        
        // 打印客户端信息
        printf("client ip:%s\n port :%d\n",
                inet_ntop(AF_INET,&client.sin_addr.s_addr,client_ip,sizeof(client_ip)),
                ntohs(client.sin_port));
        
        // 注意:此处仅为演示连接获取,实际回声服务器需要在此处加入 recv/send 循环
        // 由于 while(done) 中未修改 done 或 break,这是一个无限循环且无退出的演示结构
    }
    return 0;
}

3. 编译与运行

第1步:编译源代码

目的:将C源文件转换为机器可执行的文件。请确保在终端中位于 echo_server.c 所在目录。

  • 操作命令:gcc echo_server.c -o echo_server.exe
  • 说明:使用 gcc 编译器,指定输出文件名 -o echo_server.exe。

第2步:启动服务器进程

目的:使服务器开始监听端口 666。

  • 操作命令:./echo_server.exe
  • 预期输出:等待客户端的连接..
  • 状态:此时程序会暂停并在后台/前台保持运行,直到有连接进入。

4. 客户端测试与结果验证

第3步:使用 Telnet 连接服务器

目的:模拟客户端向服务器发起 TCP 连接。

  • 打开新的终端窗口。
  • 输入命令:telnet 127.0.0.1 666
  • 预期响应:
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

当连接成功后,服务器端的终端界面将打印出客户端的 IP 地址和端口号信息:

[root@localhost c++]# ./echo_server.exe 
等待客户端的连接..
client ip:127.0.0.1
 port :36156

5. 总结与注意事项

上述流程展示了基于C语言Socket编程的基础生命周期:Create -> Bind -> Listen -> Accept。虽然此示例代码中省略了实际的 recv 和 send 数据回显逻辑(主要为了展示连接获取过程),但它清晰地揭示了服务器如何识别并记录接入的客户端。

在实际生产环境中,完整的回声服务器需要在 accept 之后添加一个循环,调用 recv() 读取缓冲区数据,并立即调用 send() 将数据写回。此外,建议在网络编程开发中加入错误检查(如判断 socket 创建是否失败)以及多线程或异步 I/O 模型以支持并发连接。

以上就是C语言实现简单回声服务器的详细内容,更多关于C语言Socket编程与服务器开发的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表