nng 到 pynng 通信不工作

nng to pynng communication is not working

我正在尝试制作一个通过 nng 发布图像的 c 程序服务器,以及一个通过 pynng 订阅图像的 python 客户端。

出于某种原因,我无法连接这两个部分,我也不知道为什么。 C/C++-程序编译和运行良好,python 程序也是如此,但是在 C/C++-程序上发布了一些内容,在 python 客户端上没有收到任何内容.客户端和服务器运行在同一台机器上。这是我的 C/C++ 服务器代码:

#include <nng/nng.h>
#include <nng/protocol/pubsub0/pub.h>

int main(int argc, char* argv[]){

    nng_socket sock;
    int rv;
    const char *url = "tcp://0.0.0.0:2234";

    if ((rv = nng_pub0_open(&sock)) != 0) {
            fatal("nng_pub0_open", rv);
    }
    if ((rv = nng_listen(sock, url, NULL, 0)) < 0) {
            fatal("nng_listen", rv);
    }

    // camera setup code omitted

    while(1){
        INT r = IS_SUCCESS;
        char* frame =(char*) d.processNextFrame(50,r); // grab image. if not successful, continue loop
        if (r != IS_SUCCESS || !frame)
            continue;

        std::cout << "frame caught... "<< bpp * nImgW * nImgH<< std::endl;

        if ((rv = nng_send(sock, frame, bpp * nImgW * nImgH, 0)) != 0) {
            fatal("nng_send", rv);
        }else{
            std::cout << "Frame Sent... "<< std::endl;
        }
    }
}

这是我的 python 客户端代码:

from pynng import Sub0, Timeout
address = 'tcp://127.0.0.1:2234'
sub2 = Sub0(dial=address, recv_timeout=5000)
print(sub2.recv())

谁能帮我理解为什么这不起作用?

您必须在您的订阅套接字上订阅主题,否则您将收不到任何内容。为了接收所有消息,订阅空字符串:

from pynng import Sub0, Timeout
address = 'tcp://127.0.0.1:2234'
# note the additional keyword argument, topics:
# =============================================
sub2 = Sub0(dial=address, recv_timeout=5000, topics=b'')
print(sub2.recv())

这里是 Sub0.

的 Pyng 文档

我是 Pynng 的创造者。最好在文档中明确说明不订阅任何东西意味着你永远不会收到任何东西;这是一个常见的混淆点。