客户端向服务器发送十次结构(包含一个数组)。服务器作业是接收此结构并进行打印。但它只接收一次结构并打印出来然后退出给出这个错误
“terminate called after throwing an instance of 'zmq::error_t'
”。
这是客户端C ++代码:
#include <zmq.hpp>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <zmq2.h>
#include "structure.h"
int main (void)
{
int flags=0,value,buffer[10];
printf ("Connecting to hello world server…\n");
void *context = zmq_ctx_new ();
void *requester = zmq_socket (context, ZMQ_REQ);
zmq_connect (requester, "tcp://localhost:5555");
for(int i=0;i!=10;i++)
{
msg.arr[i]=i;
}
for(int i=0;i!=10;i++)
{
printf ("Sending Hello %d…\n", i);
zmq_send(requester,&msg, sizeof(Message),0);
}
zmq_close (requester);
zmq_ctx_destroy (context);
return 0;
}
这是服务器C ++代码:
#include <stdint.h>
#include "structure.h"
#include "zmq.hpp"
#include <string>
#include <iostream>
#include <unistd.h>
int main () {
int val;
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");
while(true)
{
Message* msg;
zmq::message_t zmsg;
socket.recv(&zmsg);
msg = (Message*)zmsg.data();
for(int i=0;i<10;i++)
{
std::cout<<msg->arr[i]<<std::endl;
}
sleep(1);
}
return 0;
}
这是 structure.h
struct Message
{
int arr[10];
}msg;
如何从服务器端接收所有十个结构并打印出十个结构?
提前致谢。
答案 0 :(得分:1)
如果您的需求完全如上所述,只需更改ZeroMQ可扩展形式通信原型模式就足够了。
如果您选择尽可能接近REQ/REP
&#34;相似度&#34;,请使用 XREQ/XREP
,如果有更多话要说并计划一些进一步扩展分布式信令/消息服务基础设施,使用一对 C->S
+ S->C + PUSH/PULL
> PUSH/PULL
强>
如果一个消息传递范例只能与一个独占的节点对共存,那么 PAIR/PAIR
可能是一个选项,其中PAIR/PAIR
(已实施)不提供以后扩展到.connect()
到N:1
或1:M
或N:M
对等节点框架的方法。