ZeroMQ基本示例使用

使用 vcpkg 安装(推荐)

1. 安装 vcpkg

打开命令提示符(cmd)或 PowerShell,执行:

复制代码
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg integrate install

2. 安装 ZeroMQ 和 cppzmq

powershell 复制代码
.\vcpkg install zeromq cppzmq:x64-windows

添加基本测试代码

CMake文件

复制代码
cmake_minimum_required(VERSION 3.15)
project(ZeroMQDemo)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 如果使用了 vcpkg 工具链,find_package 会自动找到库
find_package(cppzmq REQUIRED)

add_executable(server server.cpp)
add_executable(client client.cpp)

# 链接库
target_link_libraries(server PRIVATE cppzmq)
target_link_libraries(client PRIVATE cppzmq)

服务端

C++ 复制代码
#include <zmq.hpp>
#include <iostream>
#include <string>

int main() {
    zmq::context_t context(1);
    zmq::socket_t socket(context, zmq::socket_type::rep);
    socket.bind("tcp://*:5555");

    std::cout << "Server listening on tcp://*:5555..." << std::endl;

    while (true) {
        zmq::message_t request;
        auto res = socket.recv(request, zmq::recv_flags::none);
        if (res) {
            std::cout << "Received: " << request.to_string() << std::endl;
        }

        zmq::message_t reply(5);
        memcpy(reply.data(), "World", 5);
        socket.send(reply, zmq::send_flags::none);
    }
    return 0;
}

客户端

C++ 复制代码
#include <zmq.hpp>
#include <iostream>
#include <string>

int main() {
    zmq::context_t context(1);
    zmq::socket_t socket(context, zmq::socket_type::req);
    socket.connect("tcp://localhost:5555");

    zmq::message_t request(5);
    memcpy(request.data(), "Hello", 5);
    socket.send(request, zmq::send_flags::none);
    std::cout << "Sent: Hello" << std::endl;

    zmq::message_t reply;
    auto res = socket.recv(reply, zmq::recv_flags::none);
    if (res) {
        std::cout << "Received: " << reply.to_string() << std::endl;
    }

    return 0;
}

解决编译报错缺少libzmq-mt-4_3_5.dll

方案一:复制 DLL 到可执行文件目录(最简单)

找到 vcpkg 安装的 DLL 文件并复制到你的 build/Release/ 目录:

powershell 复制代码
# 查找 DLL 文件位置
dir E:\vcpkg\installed\x64-windows\bin\libzmq*.dll

# 复制到你的程序目录
copy E:\vcpkg\installed\x64-windows\bin\libzmq-mt-4_3_5.dll .\build\Release\

方案二:设置环境变量(推荐)

临时设置(当前命令窗口):powershell

复制代码
# 在运行程序前设置
$env:PATH += ";E:\vcpkg\installed\x64-windows\bin"

# 然后运行程序
.\build\Release\server.exe

永久设置:powershell

复制代码
# 永久添加到用户环境变量
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";E:\vcpkg\installed\x64-windows\bin", "User")

编译运行

powershell 复制代码
mkdir build && cd build
cmake .. -DCMAKE_PREFIX_PATH="你的vcpkg安装路径/installed/x64-windows"
cmake --build . --config Release

编译完成后,在 build/Release/ 目录下运行程序 :

powershell 复制代码
# 终端1
.\server.exe

# 终端2
.\client.exe

预期运行对应生成的exe输出

  • 客户端:
    Sent: Hello → Received: World
  • 服务端:
    Received: Hello
相关推荐
老赵的博客1 小时前
c++QT之动态库加载常见报错
c++·qt
wabs6662 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao17338372 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
码匠许师傅2 小时前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml
C++ 老炮儿的技术栈2 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
佳児素花痴╮2 小时前
C++基础速通
开发语言·c++
程序喵大人3 小时前
【C++入门】值类别与表达式 - 03 引用绑定:为什么有些参数能接住临时对象
开发语言·c++·引用绑定
handler014 小时前
【Linux】信号:内核的“敲门声”
linux·运维·服务器·c++·c·信号·signal
欧特克_Glodon4 小时前
OpenCV计算机视觉开发入门与实践<三十五>:开发视频播放器
c++·opencv·计算机视觉·音视频
hansang_IR5 小时前
【题解】P9753 [CSP-S 2023] 消消乐
数据结构·c++·算法