2016-10-30 66 views
0

端口9070是簡單的HTTP服務器(無ZMQ TCP)
我有一個問題:爲什麼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

相關問題