微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何发送和获取 vector<struct> ZeroMQ 发布/订阅

如何解决如何发送和获取 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 举报,一经查实,本站将立刻删除。