繁体   English   中英

为什么 ZeroMQ 服务器没有收到来自客户端的任何请求?

[英]Why a ZeroMQ Server does not receive any requests from Client?

我在MQL4中设置了 ZeroMQ 服务器(类似于 c++ 的语言),在 Python 中设置了 ZeroMQ 客户端。 PUSH/PULL -sockets 构成的连接运行良好,但是当我尝试使用REQ -socket 从 Python 向 ZeroMQ REP -socket 发送请求时,它什么也收不到。 这是 Python 代码:

    reqSocket.connect( "tcp://locahost:%d" % REQ_PORT )

    jsonMsg = json.dumps( requestMessage )

    socket.send_string( jsonMsg )
    print( "Sent a message" )

    response = socket.recv()
    print( "received a message" )

这是MQL4代码:

    repSocket.bind( StringFormat( "%s://%s:%d",
                                   ZEROMQ_PROTOCOL,
                                   HOSTNAME,
                                   REP_PORT
                                   )
                    );
    repSocket.recv( request, true );

    if( request.size() > 0 ) {

        string reply = MessageHandler( request );
        Print( reply );
        repSocket.send( reply );
        }

我毫不怀疑 sockets 连接正确,因为我有PUSH/PULL sockets 以相同的方式连接并且工作正常。

为什么ZeroMQ 服务器没有收到来自客户端的任何请求?”

因为源代码没有发送任何

reqSocket.connect( "tcp://locahost:%d" % REQ_PORT )
#^^^^^^^^._____________________________________________________SOCKET.connect()-s
jsonMsg = json.dumps( requestMessage )
pass;      socket.send_string( jsonMsg ); print( "Sent" )
response = socket.recv();
#          ^^^^^^.____________________________________other_one_.{send|recv}()-es

socket.send_string( jsonMsg ) 这不是发送请求吗? BTW socket = reqSocket (作为function中的变量传递,所以这不是问题) – 1 小时前

真是一场讲座!

@blend如果您对未在 MCVE 中发布的信息进行争论,您可能会鄙视那些赞助他们的时间和知识来帮助您的人。 对于这个社区来说,这是一种反模式,与站点文化完全相反。


下一个候选者——如果一个socket对象实际上是一个秘密重新修饰的reqSocket

也许, .connect()方法应该被调用时更加小心,
使用"tcp://locaLhost:%d" % REQ_PORT ,不是吗?

完全准备好听到,您的 DNS 表已经设置并处于活动状态,可以顺利地将locahost符号主机名转换为localhost和许多其他符号名称,
就在太平洋的这一边,似乎很明显,至少到目前为止

:o)

我的代码:

    Context *context;
    Socket *rec;

    string ZEROMQ_PROTOCOL = "tcp";
    string HOSTNAME = "127.0.0.1";
    #define REP_PORT 55555
...
   context=new Context();   // <-- mayby u a forget
   rec= new Socket(context,ZMQ_REQ);
   rec.setReceiveTimeout(500);
   cConnect = StringFormat( "tcp://%s:%s",HOSTNAME,REP_PORT);
   rec.connect(cConnect);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM