zmq 中的事件

extern "C"{


#include <zmq.h>


}
#pragma comment(lib,"libzmq_d.lib")
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
int read_msg(void* s, zmq_event_t* event, char* addr)
{
zmq_msg_t msg1, msg2;


zmq_msg_init(&msg1);
zmq_msg_init(&msg2);
    zmq_msg_recv(&msg1, s, 0);
zmq_msg_recv(&msg2, s, 0);


const char* data =(const char*) zmq_msg_data(&msg1);
memcpy(&(event->event), data, sizeof(event->event));
memcpy(&(event->value), data + sizeof(event->event), sizeof(event->value));
memcpy(addr, zmq_msg_data(&msg2), zmq_msg_size(&msg2));




return 0;








}
void monitor(void* ctx)
{
void* s = zmq_socket(ctx, ZMQ_PAIR);
zmq_connect(s, "inproc://monitor.rep");
zmq_event_t event;
char addr[256] = { 0 };
while (!(read_msg(s, &event, addr)))
{
switch (event.event)
{
// 连接请求被接受, 其value 是连接进来的文件描述符, 或者是句柄
case ZMQ_EVENT_ACCEPTED:
printf("有一个新的连接已经被接受, 其文件描述符或者句柄是:%d\n", event.value);
break;
case ZMQ_EVENT_ACCEPT_FAILED:
printf("不能接受一个来自于客户端的连接:其错误信息是:%s\n", zmq_strerror(event.value));
break;
case ZMQ_EVENT_BIND_FAILED:
printf("不能绑定到地址,其错误信息是:%s\n",zmq_strerror(event.value));
break;
case ZMQ_EVENT_CLOSED:
printf("标识为%d的连接已经关闭连接了.\n", event.value);
break;
case ZMQ_EVENT_CONNECTED:
printf("和远程已经建立了连接了,这个新连接的文件描述符是%d.\n", event.value);
  break;
case ZMQ_EVENT_CONNECT_DELAYED:
printf("尝试将同步连接,变成异步连接\n");
break;
case ZMQ_EVENT_CONNECT_RETRIED:
printf("尝试重新连接,其重新连接的间隔为%d\n", event.value);
break;
case ZMQ_EVENT_DISCONNECTED:
printf("连接崩溃,出现崩溃的文件描述符是%d\n", event.value);
break;
case ZMQ_EVENT_LISTENING:
printf("正在准备接受连接..., 其文件描述符是监听套接字:%d\n",event.value);
break;
case ZMQ_EVENT_MONITOR_STOPPED:
break;
default:
break;
}
}
}
int main(int argc, char* argv[])
{
void* ctx = zmq_ctx_new();
void* server = zmq_socket(ctx, ZMQ_REP);
zmq_socket_monitor(server, "inproc://monitor.rep", ZMQ_EVENT_ALL);


_beginthread(monitor, 0, ctx);

zmq_bind(server, "tcp://127.0.0.1:5050");

zmq_msg_t request;
zmq_msg_t replay;
char* str = "my name is server.";
char buffer[1024] = { 0 };
zmq_msg_init_data(&replay, str, strlen(str), 0, 0);
while (true)
{
zmq_msg_init(&request);
zmq_msg_recv(&request,server,0);
memcpy(buffer, zmq_msg_data(&request), zmq_msg_size(&request));
buffer[zmq_msg_size(&request)] = '\0';
printf("%s\n", buffer);
zmq_msg_send(&replay, server, 0);
}








return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值