zeromq c标识客户端



我曾在visual studio 2015中使用win7 x64。

我试图通过zmqidentity找到特定的客户端。但是没有工作。

代码

服务器

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套接字进行连接,以查看标识帧。

最新更新