因为需要用 C++ 实现联机对战的功能,但是不想直接用 winsock ,因此选了ZMQ 框架(不知道合不合适)。安装的过程还是挺艰辛的。但是也学到了些东西,记录一下。另外,Zmq 的作者 Pieter Hintjens 在 2016 年因为癌症的原因走了,他的聪明和幽默不会再有更多了,但他留下的,仍然在影响着世界。

ZMQ简介

ZMQ(ØMQ、ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的快速足以胜任集群应用产品。它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务。ZMQ有着多语言支持,并能在几乎所有的操作系统上运行。ZMQ是iMatix公司的产品,以LGPL开源协议发布。

ZMQ Guide

ZMQ指南

下载libzmq

Github仓库:ZeroMQ

将根目录名改为libzmq,执行libzmq\builds\msvc\build\buildall.bat

加载静态库

失败了o.o

2017.5.15 今天中午再次折腾了一下,终于成功了^^。

  • libzmq\bin\x64\Release\v141\static\libzmq.lib拷贝到工程根目录,修改名字为libzmq-static.lib,当然不修改也可以,只要和下一步的附加依赖项的相符就可以。

  • 项目->工程属性->链接器->输入->附加依赖项,加上 libzmq-static.lib; ws2_32.lib; iphlpapi.lib;,后面两个库不加上去编译就不能通过。

  • 项目->工程属性->C/C++->代码生成->运行库,修改为 多线程(MT),这里修改前默认的是MD,代表是动态链接,如果要调试版本,就选择MTd。

  • 项目->工程属性->C/C++->预处理器->预处理器定义,添加ZMQ_STATIC;

加载动态库

  • libzmq\bin\x64\Release\v141\dynamic\libzmq.lib拷贝到工程根目录

  • 项目->工程属性->链接器->输入->附加依赖项,加上 libzmq.lib

  • 项目->工程属性-> C/C++,附加库路径,加上libzmq\includes

  • 拷贝 libzmq\bin\x64\Release\v141\dynamic\libzmq.dll 到编译运行后的项目根目录\x64\Release下。

HelloWorld

服务端server.cpp

  1. #include <zmq.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #ifdef _WIN32
  5. #include <windows.h>
  6. #define sleep(x) Sleep(x)
  7. #else
  8. #include <unistd.h>
  9. #endif
  10. int main() {
  11. // 准备上下文和套接字
  12. zmq::context_t context(1);
  13. zmq::socket_t socket(context, ZMQ_REP);
  14. socket.bind("tcp://*:5555");
  15. while (true) {
  16. zmq::message_t request;
  17. // 等待客户端请求
  18. socket.recv(&request);
  19. std::cout << "收到 Hello" << std::endl;
  20. // 做一些“处理”
  21. sleep(1);
  22. // 应答World
  23. zmq::message_t reply(5);
  24. memcpy((void *)reply.data(), "World", 5);
  25. socket.send(reply);
  26. }
  27. return 0;
  28. }

客户端client.cpp,放在另一个工程里

  1. //
  2. // Hello World client in C++
  3. // Connects REQ socket to tcp://localhost:5555
  4. // Sends "Hello" to server, expects "World" back
  5. //
  6. #include <zmq.hpp>
  7. #include <string>
  8. #include <iostream>
  9. int main ()
  10. {
  11. // Prepare our context and socket
  12. zmq::context_t context (1);
  13. zmq::socket_t socket (context, ZMQ_REQ);
  14. std::cout << "Connecting to hello world server..." << std::endl;
  15. socket.connect ("tcp://localhost:5555");
  16. // Do 10 requests, waiting each time for a response
  17. for (int request_nbr = 0; request_nbr != 10; request_nbr++) {
  18. zmq::message_t request (6);
  19. memcpy ((void *) request.data (), "Hello", 5);
  20. std::cout << "Sending Hello " << request_nbr << "..." << std::endl;
  21. socket.send (request);
  22. // Get the reply.
  23. zmq::message_t reply;
  24. socket.recv (&reply);
  25. std::cout << "Received World " << request_nbr << std::endl;
  26. }
  27. return 0;
  28. }

10次的消息成功通讯了,然而客户端最后异常结束了。o.o

Windows10 + Visual Studio 2017环境为C++工程安装使用ZMQ的更多相关文章

  1. 从头开始学eShopOnContainers——Visual Studio 2017环境配置

    一.安装和配置Docker环境 1.安装Docker CE for Windows 从官方网站下载并安装,https://docs.docker.com/docker-for-windows/inst ...

  2. MariaDB + Visual Studio 2017 环境下的 ODBC 入门开发

    参考: Easysoft公司提供的ODBC教程 微软提供的ODBC文档 环境: Windows 10 x64 1803 MariaDB TX 10.2.14 x64 MariaDB ODBC Conn ...

  3. Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试

    由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ...

  4. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...

  5. visual studio 2017 installer 安装包的安装必备组件设置

    visual studio installer 2017  安装包的安装必备组件设置,默认设置只有net frmwork 4.6.1,如下图 这个时候如果打包安装,那么打出来的包一定需要先安装4.6. ...

  6. visual studio 2017 报错 无法下载安装文件。请检查Internet连接,然后重试

    vs下载完离线安装包在无网络环境下点击安装时出现无法下载安装文件.请检查Internet连接,然后重试 原因是证书没有导 解决方法 打开刚刚存放离线文件的路径,比如D:\vs2017offline,然 ...

  7. (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题

    适用情景: 1,ServerVersion出了问题,“SqlCnt.ServerVersion”引发了类型“System.InvalidOperationException”的异常 2,在String ...

  8. win10 visual studio 2017环境中安装CUDA8

    从https://developer.nvidia.com/cuda-toolkit-archive下载CUDA 8 安装 从https://developer.nvidia.com/gamework ...

  9. Visual Studio 2017十五项新功能体验

    Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP 2017技术峰会将于这个周末(3.17)在北京举办,由 ...

随机推荐

  1. koa generator

    Koa (koajs) -- 基于 Node.js 平台的下一代 web 开发框架 | Koajs... Koa 框架教程 koa入门 如何评价 Node.js 的koa框架?

  2. 小小知识点(一)——利用电脑自带的BitLocker对磁盘加密

    1.利用电脑自带的BitLocker可以对固定的或移动的磁盘加密 网上有很多的使用方法步骤,可参考百度经验:https://jingyan.baidu.com/article/636f38bb4fac ...

  3. 爬虫——xpath

    1.什么是xpath? Xpath,全称XML Path Language,即XML路径语言.它是一门在XML之后查找信息的语言,也同样适用于HTML文档的搜索.在做爬虫的时候,我们用XPath语言来 ...

  4. 从Mongo导出数据库到Excel

    在MongoDB的安装目录的bin文件夹下打开命令行: ./mongoexport -d kugou_db -c songs -f rank,singer,song,time --type=csv - ...

  5. JAVAString初始化的引用问题

    1 String a="Hello JAVA"; 2 3 String b=a; 4 5 System.out.println(a); 6 7 System.out.println ...

  6. ORA-28000: the account is locked解决办法

    ORA-28000: the account is locked第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;第二步:选择myjob, ...

  7. vant的坑

    1.轮播图设置, .img { width: 100%; height: 100%; object-fit: cover; touch-action: none; } 如果不设置不能达到 保持纵横比缩 ...

  8. Day 5-6 反射和内置方法之item系列

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) #!_*_ coding:utf-8 _*_ class People: def ...

  9. springboot的几种启动方式

    一:IDE 运行Application这个类的main方法 二:在springboot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到 ...

  10. WorldCount代码检查与优化——软件测试第三次作业

    合作者:201631062222,201631062232 代码地址:https://gitee.com/biubiubiuLYQ/ceshi_secend 本次作业链接地址:https://edu. ...