zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP
阅读zeromq guide的一些学习记录
zeromq官方例子 在VC下运行会有些跨平台的错误
我这里有做修改 稍后会发布出来
/**************************************************************技术博客http://www.cnblogs.com/itdef/技术交流群群号码:324164944欢迎c c++ windows驱动爱好者 服务器程序员沟通交流**************************************************************/zeromq是对对常用的网络通讯的收发、转发、订阅、推送等模式在socket底层通讯进行封装。
指南页面 http://zguide.zeromq.org/page:all
首先是最简单的一对一收发模式
socket在代码中标记为ZMQ_REQ ZMQ_REP
ZMQ_REQ 由客户端使用 用来发送请求和收取服务器的回复。此种标记仅允许发送请求并紧跟接受回复的处理序列模式
ZMQ_REP 由服务器使用 用来接受请求并且发送给与客户端的回复。此种标记仅允许接受请求并紧跟发送回复的处理序列模式
代码如下:
// hwserver.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <zmq.h>
#include <string.h> int main()
{
void* context = zmq_ctx_new();
void* responder = zmq_socket(context, ZMQ_REP);
zmq_bind(responder, "tcp://*:5555"); while ()
{
zmq_msg_t request;
zmq_msg_init(&request);
zmq_msg_recv(&request,responder,);
printf("received Hello\n");
zmq_msg_close(&request); Sleep();
zmq_msg_t reply;
zmq_msg_init_size(&reply, );
memcpy(zmq_msg_data(&reply), "World", );
zmq_msg_send(&reply, responder, );
zmq_msg_close(&reply);
}
// should not arrive here
zmq_close(responder);
zmq_ctx_destroy(context);
return ;
}
// hwclient_c.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <zmq.h>
#include <string.h> int main()
{
void* context = zmq_ctx_new(); printf("Connecting to hello world server...\n"); void* requester = zmq_socket(context, ZMQ_REQ);
zmq_connect(requester, "tcp://localhost:5555"); int request_nbr;
for (request_nbr = ; request_nbr != ; request_nbr++) {
char buffer[];
printf("Sending Hello %d…\n", request_nbr);
zmq_send(requester, "Hello", , );
zmq_recv(requester, buffer, , );
printf("Received World %d\n", request_nbr);
}
zmq_close(requester);
zmq_ctx_destroy(context); return ;
}

关于zeromq的消息字符串需要注意以下地方
仅仅传输字符串的文字部分而没有c语言用来结尾的'\0'
字符串结构如图

zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP的更多相关文章
- zeromq学习记录(六)C语言示例
考虑到官方的示例c语言是最多的 官方未使用C++语言演示的例子就使用VC编译C语言例子 记录在此 /************************************************** ...
- zeromq学习记录(七)订阅发布消息封装
之前也有提到 使用订阅发布 pub sub模式必须要显示定义ZMQ_SUBSCRIBE 只有以此模式定义的过滤字节开头的消息才会被订阅者收到 如果想收到所有信息 可定义subscriber.setso ...
- Mybatis学习记录(一)---- 简单的CRUD
1 mybatis是什么? mybatis是一个持久层的框架,是apache下的顶级项目. mybatis托管到googlecode下,再后来托管到github下(https://github.com ...
- zeromq学习记录(八)负载均衡 附ZMQ_ROUTER的流程分析
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- zeromq学习记录(五)vc下多线程
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- zeromq学习记录(三)使用ZMQ_PULL ZMQ_PUSH
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- zeromq学习记录(二)天气更新服务器使用ZMQ_SUB ZMQ_PUB
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- Zookeeper学习记录及Java客户端连接示例
1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...
随机推荐
- forward reference前向引用,gloal values and local values全局变量和局部变量,recursive function递归函数
1.全局变量与局部变量练习 1 # -*- coding: UTF-8 -*- 2 def bar(): 3 print('from bar') 4 def foo(): 5 print('from ...
- 两个有序数组中的中位数以及求第k个最小数的值
解法参考 <[分步详解]两个有序数组中的中位数和Top K问题> https://blog.csdn.net/hk2291976/article/details/51107778 里面求中 ...
- feign接口调用异常的解决方向
1. consul: 检查调用方服务与被调用方服务是否在同一个consul; 2. swagger: 检查swagger注释是否清晰.恰当: 比如: @ApiImplicitParams(value ...
- 【亲测显式等待】Selenium:元素等待的4种方法
Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...
- xlrd 和xlwt 对Excel的操作
xlrd与xlwt库的异同点对比 相同点 都支持对Excel文件格式为xls的文件进行操作 不同点 xlrd只支持对Excel文件格式为xls文件的读取 xlwt只支持对Excel文件格式为xls文件 ...
- spring boot 常见三十四问
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- CMake,win10,64位,简单配置测试
https://cmake.org/download/ 下载完成后,解压即可. 创建文件夹,文件路径自己选择: 这里,就近选择在桌面--创建HelloWorld档,在该文档下,分别创建CMakeLis ...
- Maven CXF wsdl2Java String生成JAXBElement<Xxx> 解决方法
添加要bindingFile的jaxb配置文件,如下: <jaxb:bindings version="2.1" xmlns:jaxb="http://java.s ...
- spring boot 错误处理之深度历险
今天终于把 boot 的异常处理完全研究透了: boot提供了很多错误的处理工作.默认情况下,我们会看到一个whiteLabel(白标)的页面. 这个可能不是我们所需.因此我们需要定制.我于是做了个深 ...
- 3Linux常用命令
文件目录管理命令 1.touch touch 文件名 #创建空白文件 -a 修改读取(访问)时间atime -m 修改修改时间mtime -d 同时修改atime 和 mtime touch ...