前言:最好的方法还是配套使用,zmq与zmq,czmq与czmq;但总有特殊需求,需要你用czmq作为client,zmq作为server,那么,下面的代码可以作为参考:
//czmqclient.c
#include <czmq.h>
int main (void)
{
void *context = zmq_init(1);
void *requester = zmq_socket (context, ZMQ_REQ);
int nRet = zmq_connect (requester, "tcp://localhost:5555");
printf("zmq_connect: %d\r\n",nRet);
char buffer [10];
zmq_msg_t msg;
zmq_msg_init_size(&msg, 128);
const char * sz = "i am czmq client!";
memcpy(zmq_msg_data(&msg), sz, strlen(sz));
zmq_msg_send(&msg, requester, 0);
zmq_msg_recv(&msg, requester, 0);
printf ("Received : %s\r\n", (char*)zmq_msg_data(&msg));
zmq_close (requester);
return 0;
}
//zmqserver.cpp
#include <string.h>
#include <unistd.h>
#include <iostream>
#include <zmq.h>
using std::cout;
using std::endl;
using std::cin;
int main() {
void *context = zmq_init(1);
void * socket = zmq_socket (context, ZMQ_REP);
zmq_bind(socket, "tcp://*:5555");
cout << "Server is starting..." << endl;
while (true) {
//socket.recv(&message);
/* Create an empty ØMQ message */
zmq_msg_t msg;
int rc = zmq_msg_init_size (&msg, 128);
/* Block until a message is available to be received from socket */
rc = zmq_msg_recv (&msg, socket, 0);
cout << "Come from client." << (char*)zmq_msg_data(&msg)<<endl;
// do some work
sleep(1);
const char * sz = "i am zmq server!";
memcpy(zmq_msg_data(&msg), sz, strlen(sz));
zmq_msg_send(&msg, socket, 0);
}
return 0;
}
gcc -o czmqclient czmqclient.c -lzmq -lczmq -L/usr/local/lib
g++ zmqserver.cpp -o zmqserver -lzmq -L/usr/local/lib