Win+VisualStudio+vcpkg+Zeromq安装方法

1. 缘由

因为工作上要用到Windows上的zeromq来收发消息,所以我在网上搜集了一些资料最终成功地在Visual Studio2022中用c的libzmq库实现了zmq的收发。

2. 基本资料

2.1 ZeroMQ基本介绍

ZeroMQ官网介绍,因为我也不是专门搞网络和通信的,就不过多赘述了。至于为什么要用ZMQ,老板的任务罢了......

ZeroMQ (also spelled ØMQ, 0MQ or ZMQ) is a high-performance asynchronous messaging library, aimed at use in distributed or concurrent applications. It provides a message queue, but unlike message-oriented middleware, a ZeroMQ system can run without a dedicated message broker.

ZeroMQ supports common messaging patterns (pub/sub, request/reply, client/server and others) over a variety of transports (TCP, in-process, inter-process, multicast, WebSocket and more), making inter-process messaging as simple as inter-thread messaging. This keeps your code clear, modular and extremely easy to scale.

ZeroMQ is developed by a large community of contributors. There are third-party bindings for many popular programming languages and native ports for C# and Java.

2.2 vcpkg基本介绍

vcpkg官网介绍,大概就是一个跨平台安装开源库的工具:

vcpkg is a cross-platform package manager for C and C++ developers. Using vcpkg you can quickly get thousands of high quality open source libraries to empower your application and internally share collections of private components.

3. 安装

3.1 安装vcpkg

环境要求:

  • Windows 7 or newer
  • Git
  • Visual Studio 2015 Update 3 or newer
#clone vcpkg repo 如果访问github不成功,请自行解决
git clone https://github.com/Microsoft/vcpkg.git

#bootstrap
.\vcpkg\bootstrap-vcpkg.bat #for powershell
.\vcpkg\bootstrap-vcpkg.sh #for cmd

3.2 安装libzmq

进入vcpkg安装目录,执行以下命令:

(不同语言的zmq封装库不同,这里选择的是c语言版本的libzmq库)

#install libzmq
./vcpkg install zeromq:x64-windows #for x64
./vcpkg install zeromq #for x86

3.3 配置VisualStudio工程文件

3.3.1 Nuget包配置方法

进入到VisualStudio工程下打开终端:

vcpkg integrate project #生成项目配置

工程Nuget包配置方法详见:Visual Studio 2019配置 vcpkg C++包管理工具

3.3.2 cmake配置方法

cmake配置vcpkg方法:

cmake -B [build directory] -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake

#build
cmake --build [build directory]

CMakeLists.txt文件编写:

cmake_minimum_required (VERSION 3.8)


add_executable (zmp_server "zmp_server.cpp" "zmp_server.h")


include_directories("C:/Users/oceanstar/vcpkg/win/vcpkg/installed/x64-windows/include")
link_directories("C:/Users/oceanstar/vcpkg/win/vcpkg/installed/x64-windows/lib")



find_package(ZeroMQ CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE libzmq libzmq-static)

4. 测试

参考官网给出的测试程序,稍微改了个测试程序:

  • 服务端:
//zmq_server.cpp
#include <zmq.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#ifndef _WIN32
#include <unistd.h>
#else
#include <windows.h>
#endif

int main(void)
{
    //  Socket to talk to clients
    void* context = zmq_ctx_new();
    void* responder = zmq_socket(context, ZMQ_REP);
    int rc = zmq_bind(responder, "tcp://*:4396");
    assert(rc == 0);

    while (1) {
        char* buffer = new char[40];
        zmq_recv(responder, buffer, 40, 0);
        printf("%s\n",buffer);
        zmq_send(responder, "World", 5, 0);
    }
    return 0;
}
  • 客户端:
     
//zmq_client.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <zmq.h>
#include <string.h>
#include <stdio.h>
#ifndef _WIN32
#include <unistd.h>
#else
#include <windows.h>
#endif



int main(void)
{
    printf("Connecting to hello world server¡­\n");
    void* context = zmq_ctx_new();
    void* requester = zmq_socket(context, ZMQ_REQ);
    zmq_connect(requester, "tcp://localhost:4396");

    int request_nbr;
    for (request_nbr = 0; request_nbr != 10; request_nbr++) {
        char buffer[10];
        char* TLresult = new char[40];
        strcpy(TLresult, "Received from client!");
        //printf("%s\n", TLresult);
        zmq_send(requester, TLresult , 40, 0);
        zmq_recv(requester, buffer, 10, 0);
    }
    zmq_close(requester);
    zmq_ctx_destroy(context);
    return 0;
}
  • 同时启动server和client,在server端可以受到client端发来的字符串,即配置成功:

 由于网上资料比较乱,作者本人对VS的了解也有限,总体写得比较粗糙,如有错误遗漏欢迎大家指出。

参考:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值