1

我正在尝试制作一个通过 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())

有人可以帮我理解为什么这不起作用吗?

4

1 回答 1

0

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

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.

我是pynn的创造者。在文档中明确指出不订阅任何内容意味着您将永远不会收到任何东西,这可能会很好。这是一个常见的混淆点。

于 2020-05-08T15:23:38.830 回答