当前位置: 首页
编程语言
Linux C++怎样进行网络通信

Linux C++怎样进行网络通信

热心网友 时间:2026-04-23
转载

Linux C++网络通信:从基础套接字到实战示例

在Linux环境下用C++搞网络通信,套接字(socket)编程是绕不开的基石。简单来说,它就像是给不同计算机上的进程开了条“专用电话线”,让它们能通过互联网或局域网顺畅地交换数据。下面,我们就通过一个经典的TCP/IP通信实例,把服务器端和客户端的搭建过程完整走一遍。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

Linux C++怎样进行网络通信

服务器端

服务器端的角色,好比一个守候在固定地址的接待员。它的核心任务就四步:创建套接字、绑定地址、监听连接、处理请求。来看具体实现:

#include 
#include 
#include 
#include 
#include 

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char* hello = "Hello from server";

    // 创建socket文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // 设置socket选项
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }

    // 绑定socket到本地地址和端口
    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");
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }

    // 接受连接
    if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }

    // 读取客户端发送的数据
    read(new_socket, buffer, 1024);
    std::cout << "Message from client: " << buffer << std::endl;

    // 向客户端发送数据
    send(new_socket, hello, strlen(hello), 0);
    std::cout << "Hello message sent\n";

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

客户端

客户端则扮演主动呼叫者的角色。流程相对直接:创建套接字、指定服务器地址、发起连接、然后开始对话。代码如下:

#include 
#include 
#include 
#include 
#include 

int main() {
    struct sockaddr_in serv_addr;
    int sock = 0;
    const char* hello = "Hello from client";
    char buffer[1024] = {0};

    // 创建socket文件描述符
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        std::cout << " Socket creation error ";
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);

    // 将IPv4地址从文本转换为二进制形式
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        std::cout << "Invalid address/ Address not supported ";
        return -1;
    }

    // 连接到服务器
    if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
        std::cout << "Connection Failed ";
        return -1;
    }

    // 向服务器发送数据
    send(sock, hello, strlen(hello), 0);
    std::cout << "Hello message sent\n";

    // 读取服务器发送的数据
    read(sock, buffer, 1024);
    std::cout << "Message from server: " << buffer << std::endl;

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

简单梳理一下这个例子的工作流程:服务器在8080端口进入监听状态,静静等待。客户端则主动向本机(127.0.0.1)的8080端口发起连接。握手成功后,客户端率先发送问候,服务器收到后打印消息并回复,一次完整的“握手-对话-告别”流程就此完成。

想要运行起来?编译环节很简单,使用g++分别处理即可:

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

接着,先启动服务器,再运行客户端,就能看到通信效果:

./server
./client

当然,这只是一个最基础的模型,相当于网络编程的“Hello World”。真实的项目环境要复杂得多:你得考虑各种网络异常和错误处理,可能还需要引入多线程或多进程来应对海量并发连接。如果项目规模继续扩大,像Boost.Asio、libevent或libuv这些专门的高性能网络库,就该成为你的得力工具了。

来源:https://www.yisu.com/ask/51401823.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
SpringBoot+Vue3实现登录验证码功能教程

SpringBoot+Vue3实现登录验证码功能教程

前言 登录页面,输入用户名和密码进行验证,这对各位开发者来说早已是家常便饭。但说到那个需要用户手动填写、甚至时不时需要“看不清?换一张”的图片验证码,不少朋友在实现时可能会犯嘀咕:这随机生成的图片,到底该怎么弄? 今天,我们就来重点拆解这个功能:如何在后端生成验证码图片,如何在前端展示并实现点击刷新

时间:2026-04-25 16:31
Java实现抠图的三种主流方案详解

Java实现抠图的三种主流方案详解

Ja va实现抠图的三种主流方案详解 在Ja va项目里实现图片抠图,也就是把背景去掉或者把主体单独拎出来,这事儿说简单也简单,说复杂也复杂。关键看你要处理的是什么类型的图片。是绿幕视频截图,还是普通的生活照,或者对头发丝这种细节要求极高?不同的场景,技术路径的选择天差地别。 总的来说,目前主流的实

时间:2026-04-25 16:31
HDFS与YARN如何协同配置

HDFS与YARN如何协同配置

HDFS与YARN协同配置:让数据存储与资源管理无缝对接 在Hadoop生态里,HDFS和YARN堪称黄金搭档,一个管数据存储,一个管资源调度。想让它们默契配合,高效运转,关键就在于正确的协同配置。下面这份配置指南,可以说是搭建稳定Hadoop集群的必经之路。 1 配置HDFS:打好数据地基 HD

时间:2026-04-25 16:30
如何调整HDFS的内存设置

如何调整HDFS的内存设置

要调整HDFS(Hadoop分布式文件系统)的内存设置,您需要修改Hadoop配置文件中的相关参数。以下是一些关键参数及其调整方法: 1 调整NameNode内存设置 作为HDFS的“大脑”,NameNode负责管理整个文件系统的元数据。它的内存配置直接关系到集群的响应能力和稳定性。调整其内存设置

时间:2026-04-25 16:30
如何通过dmesg诊断硬件故障

如何通过dmesg诊断硬件故障

如何通过dmesg诊断硬件故障 在Linux系统管理和故障排查的“工具箱”里,dmesg(display message或driver message)绝对算得上是一把“瑞士军刀”。这个看似简单的命令行工具,能直接读取内核环形缓冲区中的消息,为我们揭示系统启动的完整历程和运行时的内部状态。当硬件出现

时间:2026-04-25 16:30
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程