ZMQ (一、请求回应模型)

ZMQ(REQ-REP)

请求回应模型,客户端和服务端必须是一问一答的模式,如果客户端发送信息,服务端没有回信的话,客户端便不会继续发送信息,处于消息等待状态。可以有多个客户端,但是必须是一请求一应答。

                                                                    

C++示例代码:

服务端代码:

//server端

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

int main()
{
	void *context = zmq_ctx_new();
	void *socket = zmq_socket(context, ZMQ_REP);
	zmq_bind(socket, "tcp://*:6000");

	int i = 1;//消息计数
	while (1)
	{
		char recvBuf[10] = { 0 };
		char *sendBuf = "world";

		int bytes = zmq_recv(socket, recvBuf, sizeof(recvBuf), 0);
		recvBuf[bytes] = '\0';
		printf("[Server] ---《%d》--- recvMessage:%s   size = %d bytes\n", i++, recvBuf, bytes);

		Sleep(1000);

		bytes = zmq_send(socket, sendBuf, strlen(sendBuf) + 1, 0);
		printf("[Server] ---《%d》--- sendMessage: %s   size = %d bytes\n", i, sendBuf, bytes);

	}

	zmq_close(socket);
	zmq_ctx_destroy(context);

	system("pause");
	return 0;
}

客户端代码:

//client

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

int main()
{
	void *context = zmq_ctx_new();
	void *socket = zmq_socket(context, ZMQ_REQ);
	zmq_connect(socket, "tcp://localhost:6000");

	int i = 1;//消息计数
	for(int num = 0;num<10;num++)
	{
		char recvBuf[10] = { 0 };
		char *sendBuf = "hello";

		int bytes = zmq_send(socket, sendBuf, strlen(sendBuf) + 1, 0);
		printf("[Client] ---《%d》--- sendMessage: %s   size = %d bytes\n", i, sendBuf,bytes);

		bytes = zmq_recv(socket, recvBuf, sizeof(recvBuf), 0);
		recvBuf[bytes] = '\0';
		printf("[Client] ---《%d》--- recvMessage:%s   size = %d bytes\n", i++, recvBuf, bytes);
	}

	zmq_close(socket);
	zmq_ctx_destroy(context);

	system("pause");
	return 0;
}

先启动server端,再启动client端,运行结果如下:

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读