现在的位置: 首页 > 综合 > 正文

【ZeroMQ】轮询zmq_poll()的使用

2018年02月19日 ⁄ 综合 ⁄ 共 2160字 ⁄ 字号 评论关闭

注意:此时不可以用ZMQ_REP ZMQ_REQ。  因为ZMQ_REQ发送一次数据后,如果没有收到数据,不能再次发送数据。 

 

ZmqIOServer端:

#include <assert.h>
#include <iostream>
#include <tchar.h>
#include <zmq.h>
using namespace std;

#pragma comment(lib,"libzmq.lib")

void main(int argc,TCHAR*argv[])
{
	void *ctx;
	ctx = zmq_init(1);
	assert(ctx);

	void *s1;
	s1 = zmq_socket(ctx,ZMQ_PULL);
	assert(s1);

	void *s2;
	s2 = zmq_socket(ctx,ZMQ_PULL);
	assert(s2);

	zmq_bind(s1,"tcp://127.0.0.1:6000");
	zmq_bind(s2,"tcp://127.0.0.1:7000");

	while(1)
	{
		zmq_pollitem_t items[2];
		items[0].socket = s1;
		items[0].fd = 0;
		items[0].events = ZMQ_POLLIN;

		items[1].socket = s2;
		items[1].fd = 0;
		items[1].events = ZMQ_POLLIN;
		int nRet = zmq_poll(items,2,-1);
		if(0 == nRet)
			continue;

		zmq_msg_t msg;
		char re_string[20] = {0};

		if(items[0].revents > 0)
		{
			zmq_msg_init(&msg);
			zmq_recv(s1,&msg,0);
			memcpy(re_string,(char*)zmq_msg_data(&msg),zmq_msg_size(&msg));
			cout<<"Socket1 recv : "<<re_string<<endl;
			zmq_msg_close(&msg);
		}

		if(items[1].revents > 0)
		{
			zmq_msg_init(&msg);
			zmq_recv(s2,&msg,0);
			memcpy(re_string,(char*)zmq_msg_data(&msg),zmq_msg_size(&msg));
			cout<<"Socket2 recv : "<<re_string<<endl;
			zmq_msg_close(&msg);
		}
	}
	
	zmq_close(s1);
	zmq_close(s2);
	zmq_term(ctx);
}

ZmqIOClient1端:

#include <assert.h>
#include <iostream>
#include <tchar.h>
#include <zmq.h>
using namespace std;

#pragma comment(lib,"libzmq.lib")

void main(int argc,TCHAR*argv[])
{
	void *ctx;
	ctx = zmq_init(1);
	assert(ctx);

	void *s1;
	s1 = zmq_socket(ctx,ZMQ_PUSH);
	assert(s1);

	zmq_connect(s1,"tcp://127.0.0.1:6000");

	while(1)
	{
		char sd_string[20];
		cout<<"请输入sd_string:"<<endl;
		gets(sd_string);

		zmq_msg_t msg;zmq_msg_init_size(&msg,strlen(sd_string)+1);
		memcpy(zmq_msg_data(&msg),sd_string,strlen(sd_string)+1);
		zmq_send(s1,&msg,0);
		zmq_msg_close(&msg);
	}

	zmq_close(s1);
	zmq_term(ctx);
}

ZmqIOClient2端:

#include <assert.h>
#include <iostream>
#include <tchar.h>
#include <zmq.h>
using namespace std;

#pragma comment(lib,"libzmq.lib")

void main(int argc,TCHAR*argv[])
{
	void *ctx;
	ctx = zmq_init(1);
	assert(ctx);

	void *s1;
	s1 = zmq_socket(ctx,ZMQ_PUSH);
	assert(s1);

	zmq_connect(s1,"tcp://127.0.0.1:7000");

	while(1)
	{
		char sd_string[20];
		cout<<"请输入sd_string2:"<<endl;
		gets(sd_string);

		zmq_msg_t msg;
		zmq_msg_init_size(&msg,strlen(sd_string)+1);
		memcpy(zmq_msg_data(&msg),sd_string,strlen(sd_string)+1);
		zmq_send(s1,&msg,0);
		zmq_msg_close(&msg);
	}

	zmq_close(s1);
	zmq_term(ctx);
}

 

抱歉!评论已关闭.