温馨提示×

linux c++怎么实现通信

小樊
34
2026-07-05 19:29:04
栏目: 编程语言

在 Linux 下用 C++ 实现通信,常见方式取决于通信对象(本机 / 网络)和场景。下面按常见需求给你一个系统性的总结,并附上可直接用的示例


一、常见通信方式概览

场景 推荐方式
本机进程间通信 管道、消息队列、共享内存、Unix Domain Socket
网络通信 TCP / UDP Socket
高性能 / 低延迟 共享内存 + 信号量
本机简单通信 匿名管道
网络通用 TCP Socket(最常用)

二、最常用:TCP Socket(网络 / 本机都可用)

1️⃣ TCP 通信基本流程

Server: socket → bind → listen → accept → read/write
Client: socket → connect → read/write

2️⃣ TCP 服务端(C++)

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

int main() {
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in addr{};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = INADDR_ANY;

    bind(server_fd, (sockaddr*)&addr, sizeof(addr));
    listen(server_fd, 5);

    std::cout << "Server listening on port 8080..." << std::endl;

    int client_fd = accept(server_fd, nullptr, nullptr);
    char buf[1024]{};
    read(client_fd, buf, sizeof(buf));
    std::cout << "Received: " << buf << std::endl;

    write(client_fd, "Hello from server", 18);
    close(client_fd);
    close(server_fd);
}

3️⃣ TCP 客户端(C++)

#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in addr{};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    connect(sock, (sockaddr*)&addr, sizeof(addr));

    write(sock, "Hello Server", 13);

    char buf[1024]{};
    read(sock, buf, sizeof(buf));
    std::cout << "Server reply: " << buf << std::endl;

    close(sock);
}

三、本机进程通信(推荐)

✅ Unix Domain Socket(比 TCP 快,适合本机)

int fd = socket(AF_UNIX, SOCK_STREAM, 0);
  • 地址结构用 sockaddr_un
  • 不走网络协议栈,性能高
  • 常用于 守护进程 / 本地服务

四、简单进程通信:匿名管道(父子进程)

int pipefd[2];
pipe(pipefd);

if (fork() == 0) { // 子进程
    close(pipefd[1]);
    char buf[100];
    read(pipefd[0], buf, sizeof(buf));
} else { // 父进程
    close(pipefd[0]);
    write(pipefd[1], "hello", 5);
}

✅ 适合:

  • 父子进程
  • 单向通信

五、高性能:共享内存 + 信号量

适合:

  • 大数据
  • 低延迟
  • 实时系统

常用 API:

  • shmget / shmat
  • semget / semop

(代码较复杂,需要我可以单独展开)


六、C++ 封装建议

推荐库

  • boost.asio(跨平台,生产级)
  • libevent
  • ZeroMQ

❌ 不建议:

  • 直接用裸 socket 写大型项目

七、我可以进一步帮你

你可以直接告诉我:

  1. 网络通信还是本机通信?
  2. TCP / UDP / 进程间?
  3. 是否需要多线程 / epoll?
  4. 是否用于实际项目(服务器 / 嵌入式 / 机器人)?

我可以给你:

  • ✅ 完整工程示例
  • ✅ epoll 高并发服务器
  • ✅ C++ 封装类
  • ✅ 框架级设计(像 Redis / Nginx 那样)

0