C++ socket编程入门_C++ TCP客户端与服务端实现

首先实现TCP服务端与客户端通信,服务端绑定8080端口监听并接收客户端连接,客户端向127.0.0.1:8080发起连接,双方通过socket收发“Hello”消息,使用g++编译后依次运行server和client可完成一次基础通信。

c++ socket编程入门_c++ tcp客户端与服务端实现

想快速上手C++网络编程?从TCP客户端与服务端开始是最直接的方式。本文带你一步步实现一个基础但完整的C++ TCP通信程序,适用于Linux环境(如Ubuntu、CentOS),使用标准的socket API。

1. 理解TCP通信基本流程

TCP是面向连接的协议,通信前必须建立连接。服务端监听端口,客户端主动发起连接。一旦连接成功,双方可通过套接字读写数据。

服务端流程:

创建套接字(socket) 绑定地址和端口(bind) 开启监听(listen) 接受客户端连接(accept) 收发数据(recv/send) 关闭连接(close)

客户端流程:

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

创建套接字 连接服务端(connect) 收发数据 关闭连接

2. C++实现TCP服务端

以下是一个简单的TCP服务端代码示例:

#include #include #include #include #include int main() {    int server_fd, client_fd;    struct sockaddr_in address;    int addrlen = sizeof(address);    char buffer[1024] = {0};    // 创建套接字    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {        perror("socket failed");        return -1;    }    // 配置地址结构    address.sin_family = AF_INET;    address.sin_addr.s_addr = INADDR_ANY;    address.sin_port = htons(8080);    // 绑定端口    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {        perror("bind failed");        close(server_fd);        return -1;    }    // 开始监听    if (listen(server_fd, 3) < 0) {        perror("listen");        close(server_fd);        return -1;    }    std::cout << "Server listening on port 8080...n";    // 接受连接    if ((client_fd = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {        perror("accept");        close(server_fd);        return -1;    }    // 接收数据    int valread = read(client_fd, buffer, 1024);    std::cout << "Received: " << buffer << std::endl;    // 发送响应    const char *response = "Hello from server";    send(client_fd, response, strlen(response), 0);    // 关闭连接    close(client_fd);    close(server_fd);    return 0;}

3. C++实现TCP客户端

对应的服务端,客户端代码如下:

#include #include #include #include #include int main() {    int sock = 0;    struct sockaddr_in serv_addr;    char buffer[1024] = {0};    const char *message = "Hello from client";    // 创建套接字    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {        perror("Socket creation error");        return -1;    }    serv_addr.sin_family = AF_INET;    serv_addr.sin_port = htons(8080);    // 将IP地址转换为二进制格式    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {        perror("Invalid address / Address not supported");        return -1;    }    // 连接服务端    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {        perror("Connection Failed");        return -1;    }    // 发送消息    send(sock, message, strlen(message), 0);    std::cout << "Message sentn";    // 接收响应    int valread = read(sock, buffer, 1024);    std::cout << "Response: " << buffer << std::endl;    // 关闭连接    close(sock);    return 0;}

4. 编译与运行方法

将服务端代码保存为 server.cpp,客户端保存为 client.cpp

使用g++编译:

g++ server.cpp -o server g++ client.cpp -o client

先运行服务端:./server

再打开另一个终端运行客户端:./client

如果一切正常,服务端会打印收到的消息,客户端会收到“Hello from server”。

基本上就这些。这个例子展示了最基础的TCP通信过程。实际开发中还需要处理错误重连、多客户端并发(可用多线程或select)、数据粘包等问题。但掌握这个模板,你就已经迈出了C++网络编程的第一步。

以上就是C++ socket编程入门_C++ TCP客户端与服务端实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1486481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Visual Studio如何调试C++代码_VS断点调试与变量查看技巧
上一篇 2025年12月19日 09:51:58
C++单例模式实现方法_C++线程安全的单例模式写法与DCLP探讨
下一篇 2025年12月19日 09:52:15

相关推荐

发表回复

登录后才能评论
关注微信