Windows下 Zmq v4.0.4的使用 (C++)
最近在研究Zero的使用。
我在网上找了一下,发觉大部分博客都写得乱七八糟,又不写明什么版本,什么系统下的,我都不知道怎么样才能弄出个编译过的程序来,只好自己摸索了。
我是windows下 使用vs2010的,v4.0.4的版本官方 0mq api 好像还没加上去,我是参照老版本(v3.1)的用法来的。
使用前你要对windows下动态库的使用有个基本了解。我的上一篇博客有讲,但有点乱,有时间再改一改。
这里我是用了动态库的隐式连接,需要动态库的 动态库文件".dll" , 动态库的LIB文件".lib" , 动态库的函数引入声明 "zmq.h" 和 "zmq_utils.h" 中有了(实现方式应该是我上篇博客末尾中的 "预编译开关切换类的导入导出定义");
本篇要试的是请求--回应模式:

使用步骤:
1.Zmq动态库的获取:
首先先下载 Zeromq 下来:http://zeromq.org/area:download,点击”Windows installers",下完安装。

安装完成后,在安装目录 C:\Program Files\ZeroMQ 4.0.4 下面,你能找到刚刚的4个文件:
ZeroMQ 4.0.4 \bin 中的 “libzmq-v100-mt-gd-4_0_4.dll”,
ZeroMQ 4.0.4 \lib 中的 "libzmq-v100-mt-gd-4_0_4.lib",
ZeroMQ 4.0.4 \include 中的"zmq.h" 和 "zmq_utils.h"
复制到你 新建要用的 项目工作目录当中。

这是服务端的,客户端也一样;
如果你的编译器不是vs2010,需要什么版本请参考:http://zeromq.org/distro:microsoft-windows

至于Debug版在是带调试信息的,Release版文件则小很多,两个都可以用,你个人喜欢。
2.Zmq动态库的使用:
1.创建server端,win32控制台 ,空项目,把 动态库文件复制进来。代码如下:
//2014-4-2 programed by sixbeauty
//zeromp 通讯测试server 端
#include "zmq.h"
#include "zmq_utils.h" //Zeromq 函数的导入在这里帮我们实现了
#include <iostream>
#pragma comment(lib,"libzmq-v100-mt-gd-4_0_4.lib")
int main()
{
std::cout << "-------------------Zeromq REP style-----------------------" <<std::endl;
std::cout << "---------------------Author:SanYue------------------------" <<std::endl; void* context=zmq_init(); //指定zmq 处理I/0事件的thread pool 为1
void* z_socket=zmq_socket(context,ZMQ_REP); zmq_bind(z_socket,"tcp://*:5555"); // accept connections on a socket int recvn=;
while() //循环工作
{
//接受部分
zmq_msg_t recv_msg;
zmq_msg_init(&recv_msg);
zmq_msg_recv(&recv_msg,z_socket,); //0表示非阻塞
std::cout<<"第\t"<<recvn++<<"\t次收到client信息:\t";
std::cout<<(char*)zmq_msg_data(&recv_msg)<<std::endl;
zmq_msg_close(&recv_msg); //发送部分
zmq_msg_t send_msg;
zmq_msg_init_size(&send_msg,);
memcpy(zmq_msg_data(&send_msg),"world",);
zmq_sendmsg(z_socket,&send_msg,);
zmq_msg_close(&send_msg);
}
zmq_close(z_socket);
zmq_term(context); return ;
}
2.client端,一样是 win32控制台 空项目,把 动态库文件复制进来。代码如下:
//2014-4-2 programed by sixbeauty
//zeromp 通讯测试client 端
#include "zmq.h"
#include "zmq_utils.h" //Zeromq 函数的导入在这里帮我们实现了
#include <iostream>
#pragma comment(lib,"libzmq-v100-mt-gd-4_0_4.lib")
int main()
{
std::cout << "-------------------Zeromq REB style-----------------------" <<std::endl;
std::cout << "---------------------Author:SanYue------------------------" <<std::endl; void* context=zmq_init(); //指定zmq 处理I/0事件的thread pool 为1
void* z_socket=zmq_socket(context,ZMQ_REQ); zmq_connect(z_socket,"tcp://localhost:5555"); // accept connections on a socket for(int i=;i<;i++) //循环工作
{
system("pause"); //暂停 //发送部分
zmq_msg_t send_msg;
zmq_msg_init_size(&send_msg,);
memcpy(zmq_msg_data(&send_msg),"hello",);
zmq_msg_send(&send_msg,z_socket,);
zmq_msg_close(&send_msg); //接受部分
zmq_msg_t recv_msg;
zmq_msg_init(&recv_msg);
zmq_msg_recv(&recv_msg,z_socket,); //0表示非阻塞
printf("收到Server端回答:\t");
std::cout<<(char*)zmq_msg_data(&recv_msg)<<std::endl;
zmq_msg_close(&recv_msg); }
zmq_close(z_socket);
zmq_term(context); return ;
}
这是 REP/REQ 请求/回应模式的尝试,这种模式必须同时有 recv 和 send,具体会在下一篇讲。
Windows下 Zmq v4.0.4的使用 (C++)的更多相关文章
- Windows 下VC++6.0制作、使用动态库和静态库
Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...
- windows下mysql 8.0.12安装步骤及基本使用教程
本文实例为大家分享了windows下mysql 8.0.12安装步骤及使用教程,供大家参考,具体内容如下 补充:mysql 已经更新到了 8.0.19,大致步骤和这个差不多,照着来就完事了. 我下载的 ...
- Windows下python 3.0版本django的安装、配置、与启动
使用的环境是Windows操作系统,python的环境是3.6,django是官网上最新的版本1.10.6,本文介绍从安装python之后怎样用过pip管理工具安装django,以及django的项目 ...
- Windows下部署ElasticSearch5.0以下版本
Windows下部署ElasticSearch分ElasticSearch5.0以上版本(包括5.0)和ElasticSearch5.0以下版本两种情况,这两种安装方式有很大不同.今天首先说Elast ...
- windows下配置cuda9.0和pytorch
今天看了看pytorch官网竟然支持windows了,赶紧搞一个. 下载cuda 9.0 https://developer.nvidia.com/cuda-downloads 下载anaconda ...
- Windows下安装CUDA8.0
在Win10下安装CUDA8.0,并使用VS2013测试: 机器配置: Windows 10 VS 2013 CUDA8.0 CUDA 8.0:下载地址 CUDA其他版本:下载地址 1. 安装CUDA ...
- 关于windows下基于php7.0.2下编写的第一个扩展
网上的教程是比较多的,但是基于php7+windows的教程非常之少,通过几天的摸索及参考很多资料,终于发现如下可以运行. php7要求使用vc2015,同时安装sdk,我使用的是8.1的window ...
- Windows下编译Redis5.0.5
先去弄Cygwin环境 http://www.cygwin.com/ 下载完成 打开 下一步 下一步 下一步 下一步 下一步,出现一个界面,让你添加地址,你打开官网,选择mirror sites,点击 ...
- windows下Qt5.1.0配置android环境搭建 good
1.首先下载好需要配置的软件: 1>Qt 5.1.0 for Android (Windows 32-bit, 716 MB)(Info)下载地址: http://qt-project.org/ ...
随机推荐
- Google Maps API v2密钥申请
1. 进入到Google APIs Console页面 https://code.google.com/apis/console/ 点击左边导航栏的Seivices进入 在All services 的 ...
- 安卓Eclipse开发人员的福音
我们知道.谷歌已经放弃对Eclipse(ADT)的维护更新了.如今官网上也找不到ADT的下载链接了,我们大多数同学仍在使用的ADT版本号可能已经非常老了,预计大多数的SDK版本号仅仅到4.4,而,在尝 ...
- 利用JMX来监控大部分java应用
JMX(JavaManagement Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系结构和网络传输协议,灵活 ...
- mui 页面跳转
1.初始化时创建子页面 mui.init({ subpages: [{ url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址 id: your - su ...
- jmeter-BeanShell Sampler
https://www.cnblogs.com/ShadowXie/p/6025941.html
- thinkphp 3.2多语言设置
1.将CheckLangBehavior.class.php(没有的话去下载完整版)文件放到此目录下:\ThinkPHP\Extend\Behavior 2.修改目录下文件Application\Ho ...
- 使用typescript开发js代码提升代码维护性
function test() { var gs = new Greeter('ss'); alert( gs.greet()); } window.onload = test; class Gree ...
- 在 SELECT 查询中使用集运算符
在 SELECT 查询中使用集运算符,可以将来自两个或多个查询的结果合并到单个结果集中. 在进行集运算之前,请确保: (1)所有输入集合中,列数和列的顺序必须相同. (2)对应的列中,数据类型必须兼容 ...
- rownum使用说明
参考:http://www.blogjava.net/conans/articles/219693.html 参考:http://www.blogjava.net/freeman1984/archiv ...
- 删除MYSQL账号多于的空用户
默认情况下,mysql安装好之后,会存在匿名用户,也可以叫空用户,输入mysql之后直接回车便可进入mysql. 该匿名用户具有一定的权限,通过SHOW DATABASES;可以查看到informat ...