nng到pynng的通信不工作

2024-06-16 14:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有人能帮我理解为什么这不起作用吗


Tags: 代码图像程序服务器客户端ifframeint
1条回答
网友
1楼 · 发布于 2024-06-16 14:35:02

您必须在订阅套接字上订阅主题,否则将无法收到任何内容。要接收所有消息,请订阅空字符串:

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())

这是^{}的pynng文档

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

相关问题 更多 >