阅读zeromq guide的一些学习记录
zeromq官方例子 在VC下运行会有些跨平台的错误
我这里有做修改 稍后会发布出来
相关的代码与库
http://download.zeromq.org/zeromq-3.2.5.zip
http://download.zeromq.org/czmq-1.4.0.zip
示例代码
https://github.com/imatix/zguide
/**************************************************************
技术博客
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 (1) { zmq_msg_t request; zmq_msg_init(&request); zmq_msg_recv(&request,responder,0); printf("received Hello\n"); zmq_msg_close(&request); Sleep(1); zmq_msg_t reply; zmq_msg_init_size(&reply, 5); memcpy(zmq_msg_data(&reply), "World", 5); zmq_msg_send(&reply, responder, 0); zmq_msg_close(&reply); } // should not arrive here zmq_close(responder); zmq_ctx_destroy(context); return 0; }
// 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 = 0; request_nbr != 10; request_nbr++) { char buffer[10]; printf("Sending Hello %d…\n", request_nbr); zmq_send(requester, "Hello", 5, 0); zmq_recv(requester, buffer, 10, 0); printf("Received World %d\n", request_nbr); } zmq_close(requester); zmq_ctx_destroy(context); return 0; }
关于zeromq的消息字符串需要注意以下地方
仅仅传输字符串的文字部分而没有c语言用来结尾的'\0'
字符串结构如图