2016-10-30 1 views
0

порт 9070 является простой HTTP-сервер (TCP без zmq)
У меня был один вопрос:Почему клиент zmq_stream нуждается в recv четыре раза, чтобы получить фактические данные?

  1. почему второй RECV является 0? откуда оно взялось?

спасибо за помощь

void test_stream_to_tcp() 
{ 
    uint8_t id [256]; 
    size_t id_size = 256; 
    uint8_t buffer [256]; 
    void *ctx = zmq_ctx_new(); 
    void *client = zmq_socket (ctx, ZMQ_STREAM); 
    int rc = 0; 
    rc = zmq_connect (client, "tcp://localhost:9070"); 
    rc = zmq_getsockopt (client, ZMQ_IDENTITY, id, &id_size); 
    rc = zmq_send (client, id, id_size, ZMQ_SNDMORE); 
    rc = zmq_send (client, "GET /\n\n", 7, 0); 
    assert (rc == 7); 
    rc = zmq_recv (client, buffer, 256, 0); 
    cout <<"first recv "<< buffer << "rc = "<< rc<<endl; 
    rc = zmq_recv (client, buffer, 256, 0); 
    cout <<"second recv "<< buffer<< "rc = "<< rc<<endl; 
    rc = zmq_recv (client, buffer, 256, 0); 
    cout <<"third recv "<< buffer<< "rc = "<< rc<<endl; 
    rc = zmq_recv (client, buffer, 256, 0); 
    buffer[rc] = '\0'; 
    cout <<"forth recv "<< buffer<< "rc = "<< rc<<endl; 
} 

ответ

0

я получил его, в zmq :: stream_engine_t :: подключи Для сокетов, отправить начальное сообщение 0 длины для приложения, так что он знает, что равноправное имеет связанный.

+0

Я понимаю, что это старый ответ. У меня такая же проблема. Я отправляю данные этому клиенту, но получаю 5 байтов, 0 байт, 5 байт, а затем реальное сообщение. Кто должен отправить сообщение длиной 0? – CptanPanic

Смежные вопросы