新闻中心

C++怎么实现TCP网络通信_C++中使用Socket套接字进行网络编程入门

2025-11-22
浏览次数:
返回列表
C++中TCP通信基于Socket API,服务器依次创建套接字、绑定地址、监听、接受连接并收发数据,客户端则创建套接字后连接服务器并通信。

c++怎么实现tcp网络通信_c++中使用socket套接字进行网络编程入门

在C++中实现TCP网络通信,主要依赖操作系统提供的Socket(套接字)API。Windows和Linux都支持Socket编程,虽然细节略有不同,但基本流程一致。下面以Linux环境为例,介绍如何使用C++编写一个简单的TCP客户端和服务器程序,帮助你快速入门网络编程。

1. TCP通信的基本流程

TCP是面向连接的协议,通信前需要建立连接。服务器和客户端的工作流程如下:

服务器端:

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

客户端:

  • 创建套接字(socket)
  • 连接服务器(connect)
  • 收发数据(recv/send)
  • 关闭连接(close)

2. 服务器端代码示例

以下是一个简单的TCP服务器,监听本地8080端口,接收客户端消息并返回响应。

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

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");
        return -1;
    }

    // 监听
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        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");
        return -1;
    }

    // 接收数据
    int valread = read(client_fd, buffer, 1024);
    std::cout << "Client: " << 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. 客户端代码示例

客户端连接到服务器,发送消息并接收回复。

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

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");
        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 sent\n";

    // 接收响应
    int valread = read(sock, buffer, 1024);
    std::cout << "Server response: " << buffer << std::endl;

    close(sock);
    return 0;
}

4. 编译与运行

在Linux终端中使用g++编译:

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

先运行服务器:

./server

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

./client

如果一切正常,你会看到客户端发送消息,服务器接收并返回响应。

基本上就这些。掌握Socket的基本调用后,可以进一步学习多客户端处理(使用fork或多线程)、非阻塞IO、错误处理等进阶内容。TCP通信是网络编程的基础,理解它对开发网络应用非常重要。

以上就是C++怎么实现TCP网络通信_C++中使用Socket套接字进行网络编程入门的详细内容,更多请关注其它相关文章!


# tcp网络通信  # 解决方法  # 怎么做  # 重写  # 绑定  # 有什么  # 网络通信  # 客户端  # 网络编程  # win  # ios  # ai  # 端口  # 操作系统  # windows  # linux  # c++  # stream  # 正定seo优化排名  # 怀化网站优化推广  # 海外推广素材网站大全免费  # ins营销推广区别在哪  # 推荐的网站建设概念设计  # 百度seo查询网站推广服务  # 新款seo优化160  # 无锡优化网站标准  # 正定网站建设注意事项  # 湖南营销推广怎么做  # 多线程 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 微博网页版直接访问 微博网页版账号管理快速入口  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  ArrayList与LinkedList操作复杂度详解:遍历与修改  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  AO3镜像入口大全 AO3网页版内容访问全集  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  J*aScript中在Map循环中检测并处理空数组元素  vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  163邮箱官方主页登录 直达网易邮箱登录核心页面  在命令行怎么运行html项目_命令行运行html项目方法【教程】  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  PHP 枚举:根据字符串获取枚举案例的策略与实现  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  AO3最新可访问网址 Archive of Our Own官方在线入口  Lar*el Excel导入时生成自定义递增ID的策略与实践  Angular中父组件异步更新子组件复选框状态的实践指南  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  必由学在线入口 必由学网页版快速登录入口  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  如何修改开机登录密码_Windows账户安全设置超详细教程【必学】  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  在Typer应用中优雅地处理和重组任意命令行参数  微信网页版官方入口直达 微信网页版网页版登录使用方法  Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  C++指针和引用有什么区别_C++内存管理核心概念深度解析  星露谷物语官网入口 星露谷物语游戏官网入口  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  UC浏览器网页版登录入口官网 电脑版网址入口  圆通快递查询实时追踪 圆通物流包裹状态快速查看  J*aScript数据结构转换:将对象数组按类别分组  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  Win11网速慢怎么解决 Win11网络设置优化解除限速  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  探索高级语言到原生C/C++的转译:挑战与内存管理策略  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  Promise错误处理:在catch后终止链式then执行的策略  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合 

搜索