跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

C++如何进行TCP客户端和服务端通信_C++ TCP通信实现方法

TCP通信通过套接字实现,服务端创建套接字、绑定地址、监听、接受连接并收发数据;客户端创建套接字、连接服务端、收发数据。代码示例展示了Linux下服务端监听8080端口,客户端连接本地服务端并发送消息的流程。Windows需初始化Winsock环境。编译运行后可完成基础通信,核心为套接字生命周期管理。

在C++中实现TCP客户端和服务端通信,主要依赖操作系统提供的套接字(Socket)API。Windows和Linux平台略有不同,但基本流程相似。下面以跨平台通用思路为主,分别说明服务端和客户端的实现步骤,并给出简化代码示例。

1. TCP服务端实现步骤

服务端的主要任务是监听指定端口,等待客户端连接,并与之收发数据。

创建套接字:使用 socket() 函数创建一个用于通信的套接字。

绑定地址:将套接字绑定到本地IP和端口上,通常使用 bind() 函数。

监听连接:调用 listen() 开始监听客户端连接请求。

接受连接:通过 accept() 接受客户端连接,生成一个新的通信套接字。

收发数据:使用 recv() 和 send() 进行数据读写。

关闭连接:通信结束后关闭相关套接字。

示例代码(Linux/类Unix系统):#include #include #include #include int main() {int server_fd, client_fd;struct sockaddr_in address;int addrlen = sizeof(address);char buffer[1024] = {0};// 创建套接字server_fd = socket(AF_INET, SOCK_STREAM, 0);address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(8080);// 绑定端口bind(server_fd, (struct sockaddr *)&address, sizeof(address));// 开始监听listen(server_fd, 3);std::cout << "等待客户端连接...\n";// 接受连接client_fd = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);// 接收数据read(client_fd, buffer, 1024);std::cout << "收到: " << buffer << std::endl;// 发送响应const char *response = "Hello from server";send(client_fd, response, strlen(response), 0);close(client_fd);close(server_fd);return 0;}

2. TCP客户端实现步骤

客户端负责主动连接服务端,发送请求并接收响应。

立即学习“C++免费学习笔记(深入)

”;

创建套接字:同样调用 socket() 创建通信套接字。

连接服务端:使用 connect() 向指定IP和端口发起连接。

收发数据:连接成功后,用 send() 发送数据,recv() 接收返回信息。

关闭连接:完成通信后关闭套接字。

示例代码(客户端):

elasticsearch-9.4.0 win PHP中文网提供Elasticsearch 9.4.0 Windows 版本压缩包下载解压即用,内置 OpenJDK 无需额外配置 Java 环境。该版本重磅推出原生 Prometheus 支持、正式版 Elastic Workflows 以及基于 NVIDIA cuVS 的 GPU 加速向量索引,大幅提升 AI 检索与可观测性能力。建议前往官网下载,快速体验极速搜索与强大的数据分析功能。

下载#include #include #include #include #include int main() {int sock = 0;struct sockaddr_in serv_addr;char buffer[1024] = {0};const char *hello = "Hello from client";// 创建套接字sock = socket(AF_INET, SOCK_STREAM, 0);serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(8080);// 将IP地址从文本转为二进制inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);// 连接服务端connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));// 发送数据send(sock, hello, strlen(hello), 0);std::cout << "消息已发送\n";// 接收响应read(sock, buffer, 1024);std::cout << "服务器回复: " << buffer << std::endl;close(sock);return 0;}

3. Windows平台注意事项

在Windows上使用Winsock,需额外初始化并链接库文件。

包含头文件:winsock2.h 和 ws2tcpip.h。

链接库:ws2_32.lib。

启动WSA:调用 WSAStartup() 初始化环境。

结束时调用 WSACleanup() 释放资源。

示例初始化代码片段:

#include #pragma comment(lib, "ws2_32.lib")WSADATA wsa;WSAStartup(MAKEWORD(2,2), &wsa);// ... 后续socket操作WSACleanup();

4. 编译与运行

在Linux下编译:

g++ server.cpp -o server g++ client.cpp -o client先运行服务端,再运行客户端测试通信。

基本上就这些。核心是理解套接字编程的基本流程:创建、绑定、监听、连接、通信、关闭。只要掌握这几个步骤,就能实现基础的TCP通信。注意错误检查和跨平台差异处理,实际项目中建议封装成类或使用Boost.Asio等网络库提升开发效率。

相关文章