ZeroMqコンパイルおよびREQ-REPモードコード
zZeroMqソースコードが/home/zhangjian/mq/libzmq-4.2.0に格納されていると仮定すると、コンパイルプロセスは以下の通りです./configure--prefix=/home/zhangjian/mq/libzmq-4.2.0--without-libsodium make-j 8&&make installはlibパスの下でlibzmqを生成する.aとlibzmq.soライブラリ
コードコンパイル:1、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/zhangjian/mq/2、コードがlibzmqを必要とする場合.so.5ライブラリでは、ソフトリンク3、g++-g-Wall-fPIC-fpermissive-I/home/zhangjian/mq-L/home/
REQ-REPモードdemo(コードは本から)clientを添付します.
server:
コードコンパイル:1、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/zhangjian/mq/2、コードがlibzmqを必要とする場合.so.5ライブラリでは、ソフトリンク3、g++-g-Wall-fPIC-fpermissive-I/home/zhangjian/mq-L/home/
zhangjian/mq-lzmq serverを作成できます.cpp -o server REQ-REPモードdemo(コードは本から)clientを添付します.
#include
#include
#include
#include "zmq.h"
void client_recv_data(void *requester, int bufLen, char *pcRspBuf)
{
zmq_msg_t reply;
zmq_msg_init(&reply);
zmq_msg_recv(&reply, requester, 0);
memcpy(pcRspBuf, zmq_msg_data(&reply), bufLen);
zmq_msg_close(&reply);
return;
}
int main (void)
{
void *context = zmq_ctx_new();
// Socket to talk to server
printf("Connecting to hello world server.
");
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 szSendBuf[10] = {
0};
snprintf(szSendBuf, sizeof(szSendBuf), "Hello_%03d", request_nbr);
zmq_msg_t request;
zmq_msg_init_data(&request, szSendBuf, strlen(szSendBuf), NULL, NULL);
zmq_msg_send(&request, requester, 0);
zmq_msg_close(&request);
printf("Sending Hello Times:%d.
", request_nbr);
/* recv response data */
char szRecvBuf[10] = {
0};
client_recv_data(requester, sizeof(szRecvBuf), szRecvBuf);
printf("Times:%d Received replay:%s
", request_nbr, szRecvBuf);
sleep(1);
}
sleep(2);
zmq_close(requester);
zmq_term(context);
return 0;
}
server:
#include
#include
#include
#include
#include "zmq.h"
void server_recv_data(void *requester, int bufLen, char *pcRspBuf)
{
zmq_msg_t reply;
zmq_msg_init(&reply);
zmq_msg_recv(&reply, requester, 0);
memcpy(pcRspBuf, zmq_msg_data(&reply), bufLen);
zmq_msg_close(&reply);
return;
}
int main ()
{
// Prepare our context and socket
void *context = zmq_ctx_new();
void *responder = zmq_socket(context, ZMQ_REP);
zmq_bind(responder, "tcp://*:5555");
while (true)
{
char szRecvBuf[10] = {
0};
server_recv_data(responder, sizeof(szRecvBuf), szRecvBuf);
printf("Server Received data:%s.
", szRecvBuf);
sleep(1);
// Send reply back to client
zmq_msg_t reply;
zmq_msg_init_data(&reply, "World", 6, NULL, NULL);
//zmq_msg_init_size(&reply, 5);
//memcpy(zmq_msg_data(&reply), "World", strlen("World"));
zmq_msg_send(&reply, responder, 0);
zmq_msg_close(&reply);
}
zmq_close(responder);
zmq_ctx_destroy(context);
return 0;
}