Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Delphi中的ZeroMQ订阅_Python_Delphi_Tcp_Zeromq - Fatal编程技术网

Python Delphi中的ZeroMQ订阅

Python Delphi中的ZeroMQ订阅,python,delphi,tcp,zeromq,Python,Delphi,Tcp,Zeromq,我目前正在使用ZeroMQ将序列化数据对象从Python服务器发送到Delphi客户端。正如您可能知道的,ZeroMQ连接有不同类型的模型,我同时使用请求/回复和发布/订阅 请求/应答模型工作得很好,一点问题也没有。但是,当我试图订阅Delphi客户机中的数据时,数据来自用Python编写的ZeroMQ发布服务器,我在获取数据时遇到了问题。我用于订阅数据的代码如下所示: PubZeroMQ.zErr( ctx=nil ); skt_pub := zmq_socket(ctx, ZMQ_SUB);

我目前正在使用ZeroMQ将序列化数据对象从Python服务器发送到Delphi客户端。正如您可能知道的,ZeroMQ连接有不同类型的模型,我同时使用请求/回复和发布/订阅

请求/应答模型工作得很好,一点问题也没有。但是,当我试图订阅Delphi客户机中的数据时,数据来自用Python编写的ZeroMQ发布服务器,我在获取数据时遇到了问题。我用于订阅数据的代码如下所示:

PubZeroMQ.zErr( ctx=nil );
skt_pub := zmq_socket(ctx, ZMQ_SUB);
PubZeroMQ.zErr( ctx=nil );
zmq_setsockopt( skt_pub, ZMQ_SUBSCRIBE, 0, 0);
PubZeroMQ.zErr( 0<>zmq_connect(skt_pub, 'tcp://*:6001'));
zmq_msg_init(@m);
r := zmq_recv(zSocket, @m, 0);
zErr( (r<>0) and (zmq_errno()<>11) ); // 11 = Resource temporarily unavailable
r := zmq_msg_size(@m);
SetLength(Result, r);
System.Move( zmq_msg_data(@m)^, Result[1], r );
zSubscribe如下所示:

PubZeroMQ.zErr( ctx=nil );
skt_pub := zmq_socket(ctx, ZMQ_SUB);
PubZeroMQ.zErr( ctx=nil );
zmq_setsockopt( skt_pub, ZMQ_SUBSCRIBE, 0, 0);
PubZeroMQ.zErr( 0<>zmq_connect(skt_pub, 'tcp://*:6001'));
zmq_msg_init(@m);
r := zmq_recv(zSocket, @m, 0);
zErr( (r<>0) and (zmq_errno()<>11) ); // 11 = Resource temporarily unavailable
r := zmq_msg_size(@m);
SetLength(Result, r);
System.Move( zmq_msg_data(@m)^, Result[1], r );

连接看起来很好,因为我没有使用请求/应答模型的问题,而且我确信Python服务器正在发布数据,因为我有C++中的另一个客户端,它工作得很好。我订阅错了吗

这是我在C++客户端< /P>中订阅的方式

void* subscriber = zmq_socket( context, ZMQ_SUB );
zmq_setsockopt( subscriber, ZMQ_SUBSCRIBE, "", 0 );
zmq_connect( subscriber, "tcp://*:6001" );
报告内容如下:

const unsigned int BUFF_SIZE = 1024;
char buffer[BUFF_SIZE];
size_t size;

size = zmq_recv( subscriber, (void*)&buffer[0], BUFF_SIZE, 0 );
提前谢谢

如果使用,错误将消失


如果看不到原始的客户端源代码,就很难找到更好的答案

您使用的是哪个Delphi客户端?如果代码可用,回答这个问题可能会更容易。我通过下载包并使用示例来解决这个问题。我不知道是什么错误。无论如何谢谢你!