如何解决如何发送和获取 vector<struct> ZeroMQ 发布/订阅
我正在使用 zeromq 并尝试执行发布/订阅套接字。 我找到了如何传输 char* 的示例,但我需要知道如何从服务器传输向量,以及如何在客户端接收它。 我已经有一个充满数据的向量mystruct>。和char的传输是有组织的,但我不明白如何传输和接收向量mystruct>。
我尝试在客户端这样做:
vector<students> inMsg(zmq_msg_size(&reply));
memcpy(inMsg.data(),zmq_msg_data(&reply),zmq_msg_size(&reply));
像这样,在服务器上,但它不起作用:
zmq_msg_t message;
zmq_msg_init_data(&message,&vectorData,sizeof(&vectorData),nullptr,NULL);
zmq_msg_send(&message,publisher,0);
zmq_msg_close(&message);
如果有任何提示,我将不胜感激。 附言抱歉英语不好。
这是一个带有字符的工作示例。 服务器端:
int main(int argc,char const *argv[])
{
void* context = zmq_ctx_new();
void* publisher = zmq_socket(context,ZMQ_PUB);
printf("Starting server\n");
int conn = zmq_bind(publisher,"tcp://127.0.0.1:8080");
const char* companies[2] = { "Company1","Company2" };
int count = 0;
for (;;)
{
int price = count % 2;
int which_company = count % 2;
int index = strlen(companies[0]);
char update[12];
snprintf(update,sizeof update,"%s",companies[which_company]);
Sleep(3000);
zmq_msg_t message;
zmq_msg_init_size(&message,index);
memcpy(zmq_msg_data(&message),update,index);
zmq_msg_send(&message,0);
zmq_msg_close(&message);
count++;
}
zmq_close(publisher);
zmq_ctx_destroy(context);
return 0;
}
客户端:
int main(int argc,char const *argv[])
{
void* context = zmq_ctx_new();
void* subscriber = zmq_socket(context,ZMQ_SUB);
printf("Collecting stock information from the server.\n");
int conn = zmq_connect(subscriber,"tcp://127.0.0.1:8080");
conn = zmq_setsockopt(subscriber,ZMQ_SUBSCRIBE,0);
for (int i = 0; i < 10; i++)
{
zmq_msg_t reply;
zmq_msg_init(&reply);
zmq_msg_recv(&reply,subscriber,0);
int length = zmq_msg_size(&reply);
char* value = (char*)malloc(length*sizeof(char)); //
memcpy(value,length);
zmq_msg_close(&reply);
printf("%s\n",value);
free(value);
}
zmq_close(subscriber);
zmq_ctx_destroy(context);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。