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