zeromq c 识别客户端

zeromq c identification client

我在 visual studio 2015 年在 win7 x64 中工作。

我尝试通过 zmq_identity 找到特定的客户。但 没用。

代码

服务器

void *context = zmq_ctx_new();
//  Socket to talk to clients
zmq::socket_t* responder = (zmq::socket_t*)zmq_socket(context, ZMQ_REP);
zmq_setsockopt(responder, ZMQ_IDENTITY, "hell", 4);
zmq_connect(responder, "tcp://localhost:5560");

while (1) {
    //  Wait for next request from client
    char buf[512];
    zmq_recv(responder, buf, 512, ZMQ_RCVMORE);
    zmq_recv(responder, buf, 512,0);
    sleep(1);
    zmq_send(responder, "B", 1, ZMQ_SNDMORE);
    zmq_send(responder, "worldB",5, 0);
}
zmq_close(responder);
zmq_ctx_destroy(context);
return 0;

客户

void *context = zmq_ctx_new();

//  Socket to talk to server
void *requester = zmq_socket(context, ZMQ_REQ);
zmq_setsockopt(requester, ZMQ_IDENTITY, "A", 1);
zmq_connect(requester, "tcp://localhost:5506");

int request_nbr;

for (request_nbr = 0; request_nbr < 5; request_nbr++) 
{
    char buf[512];
    zmq_send(requester, "Hello", 5, 0);
    std::cout << "IN RECV" << std::endl;

    int recvc = zmq_recv(requester, buf, 512, ZMQ_RCVMORE);
    printf("Received reply %d [%s]\n", recvc, buf);

    char buf2[512];
     recvc = zmq_recv(requester, buf2, 512, 0);
    printf("Received reply %d [%s]\n", recvc, buf2);
}

经纪人

//  Prepare our context and sockets
void *context = zmq_ctx_new();
void *frontend = zmq_socket(context, ZMQ_ROUTER);
void *backend = zmq_socket(context, ZMQ_DEALER);
zmq_bind(frontend, "tcp://*:5506");
zmq_bind(backend, "tcp://*:5560");


zmq_proxy(frontend, backend,NULL);

如果你运行这个,你可以看到客户端获取标识符B的消息;

我想知道如何使用 zmq 身份设置客户端标识。

如果您确实使用 REP 套接字进行连接,则看不到标识。它被套接字剥离了。

您应该尝试使用 DEALER 套接字进行连接,以查看身份框架。