Python nng到pynng的通信不工作

Python nng到pynng的通信不工作,python,c,nanomsg,pynng,Python,C,Nanomsg,Pynng,我正在尝试创建一个通过nng发布图像的c程序服务器,以及一个通过pynng订阅图像的python客户端 由于某些原因,我无法连接这两个部分,我不知道为什么。C/C++程序编译和运行良好,python程序也是如此,但是C/C++程序上发布了一些东西,python客户端上没有收到任何东西。客户端和服务器在同一台机器上运行。以下是我的服务器C/C++代码: #include <nng/nng.h> #include <nng/protocol/pubsub0/pub.h> i

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

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

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

从pynng导入Sub0,超时
地址tcp://127.0.0.1:2234'
#请注意附加的关键字参数,主题:
# =============================================
sub2=Sub0(拨号=地址,接收超时=5000,主题=b“”)
打印(sub2.recv())
这是pynng的文档


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

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

从pynng导入Sub0,超时
地址tcp://127.0.0.1:2234'
#请注意附加的关键字参数,主题:
# =============================================
sub2=Sub0(拨号=地址,接收超时=5000,主题=b“”)
打印(sub2.recv())
这是pynng的文档


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

您好,如果我设置sub2=Sub0(拨号=地址,recv_timeout=5000,topics=b''),但只有在我发送这样一条简单的消息时,我才能看到这一点:std::string tstdata(“msg”);如果((rv=nng_send(sock,(void*)tstdata.c_str(),3,0))!=0)如果我像上面所示发送大数组,它将不工作。我应该添加一些额外的东西来实现这一点吗?多大是“大”?默认情况下,nng用于删除大于1MB的消息,我不记得最新的pynng是否保持这种行为。最近的nng版本现在默认允许任何消息,未来的pynng也将允许。您可以在子套接字上将
recv_max_size
设置为
0
,以接受任何大小的消息。我正在尝试为每条消息发送5044624字节,因此在子套接字上设置
recv_max_size=0
可以解决此问题。您好,如果我设置sub2=Sub0(dial=address,recv_timeout=5000,topics=b''),但只有当我发送一条简单的消息时,我才能看到这一点:std::string tstdata(“msg”);如果((rv=nng_send(sock,(void*)tstdata.c_str(),3,0))!=0)如果我像上面所示发送大数组,它将不工作。我应该添加一些额外的东西来实现这一点吗?多大是“大”?默认情况下,nng用于删除大于1MB的消息,我不记得最新的pynng是否保持这种行为。最近的nng版本现在默认允许任何消息,未来的pynng也将允许。您可以在子套接字上将
recv_max_size
设置为
0
,以接受任何大小的消息。我正在尝试为每条消息发送5044624字节,因此在子套接字上设置
recv_max_size=0
应该可以解决这个问题。
from pynng import Sub0, Timeout
address = 'tcp://127.0.0.1:2234'
sub2 = Sub0(dial=address, recv_timeout=5000)
print(sub2.recv())