我今天看了下zeromq,也用zeromq写了几个简单的例子,然后看了下它的介绍,发送支持好多通信协议,TCP、UDP、IPC
网上讲的例子都是讲TCP通信的,我想知道如果用来实现进程间的通信,这个要怎么用呢!
zeromq进程间的通信怎么使用?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- net_building 2015-01-18 00:20关注
client:
C/C++ code#include
#include
#include
#includeint main ()
{
void *context = zmq_init (1); // Socket to talk to server
printf ("Connecting to hello world server...\n");
void *requester = zmq_socket (context, ZMQ_DEALER);
//void *requester = zmq_socket (context, ZMQ_DEALER);
zmq_connect (requester, "ipc://pub");
//zmq_connect (requester, "tcp://localhost:5555");
int request_nbr;
while(1)
{
zmq_msg_t request;
zmq_msg_init_data (&request, "Hello", 6, NULL, NULL);
printf ("Sending request %d...\n", request_nbr);
zmq_send (requester, &request, 0);
zmq_msg_close (&request);
sleep(1);
/*zmq_msg_t reply;
zmq_msg_init (&reply);
zmq_recv (requester, &reply, 0);
printf ("Received reply %d: [%s]\n", request_nbr, (char *) zmq_msg_data (&reply));
zmq_msg_close (&reply); */
}
zmq_close (requester);
zmq_term (context);
return 0;
}client1:
C/C++ code#include
#include
#include
#includeint main ()
{
void *context1 = zmq_init (1); // Socket to talk to server
printf ("Connecting to hello world server...\n");
//void *requester = zmq_socket (context, ZMQ_REQ);
void *requester1 = zmq_socket (context1, ZMQ_DEALER);//zmq_connect (requester1, "tcp://localhost:5556");
zmq_connect (requester1, "ipc://pub");
int request_nbr;
while(1)
{
/*zmq_msg_t request;
zmq_msg_init_data (&request, "wjl", 8, NULL, NULL);
printf ("Sending request %d...\n", request_nbr);
zmq_send (requester1, &request, 0);
zmq_msg_close (&request);
sleep(1); */
zmq_msg_t reply;
zmq_msg_init (&reply);
zmq_recv (requester1, &reply, 0);
printf ("Received reply %d: [%s]\n", request_nbr, (char *)
zmq_msg_data (&reply));
zmq_msg_close (&reply);
}
zmq_close (requester1);
zmq_term (context1);
return 0;
}server:
C/C++ code#include
#include
#include
#include
#include
int main ()
{
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_DEALER);
//void *responder = zmq_socket (context, ZMQ_DEALER);
// zmq_bind(responder, "ipc://pub");socket.bind ("ipc://pub");
//socket.bind ("ipc://pub1");
//socket.bind("tcp://*:5555");
//socket.bind("tcp://*:5556");while (true)
{
zmq::message_t request; // Wait for next request from client
socket.recv (&request);printf ("Received request: [%s]\n", (char *) request.data ()); // Do some 'work'
//sleep (1); // Send reply back to client
//zmq::message_t reply (8);
// memcpy ((void *) reply.data (), (char *) request.data (), 8);
socket.send (request);
}
/*while (1) {
// Wait for next request from client
zmq_msg_t request;
zmq_msg_init (&request);
zmq_recv (responder, &request, 0);
printf ("Received Hello\n");
zmq_msg_close (&request);// Do some 'work' sleep (1); // Send reply back to client zmq_msg_t reply; zmq_msg_init_size (&reply, 5); memcpy (zmq_msg_data (&reply), "World", 5); zmq_send (responder, &reply, 0); zmq_msg_close (&reply); } // We never get here but if we did, this would be how we end zmq_close (responder); zmq_term (context);*/
return 0;
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 很想要一个很好的答案或提示
- ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
- ¥15 怀疑手机被监控,请问怎么解决和防止
- ¥15 Qt下使用tcp获取数据的详细操作
- ¥15 idea右下角设置编码是灰色的
- ¥15 全志H618ROM新增分区
- ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
- ¥15 NAO机器人的录音程序保存问题
- ¥15 C#读写EXCEL文件,不同编译
- ¥15 MapReduce结果输出到HBase,一直连接不上MySQL