1

我正在学习在 android 中使用 zeromq 轮询。我正在对 android 程序(客户端)中的 req 套接字和子套接字进行轮询。这样该客户端既可以接收来自服务器的回复消息,也可以接收发布的消息。

我的投票不起作用。请求套接字和发布套接字都没有被轮询。如果我不使用轮询,两个套接字都会收到消息。

我尝试在线搜索,但找不到任何相关内容。客户端代码是这样的:

    public void run()
   {
    ZMQ.Context context = ZMQ.context(1);
    ZMQ.Socket reqsocket = context.socket(ZMQ.REQ);
    ZMQ.Socket subsocket =context.socket(ZMQ.SUB);
    reqsocket.connect("tcp://10.186.3.174:8081");
    subsocket.connect("tcp://10.186.3.174:8083");
    subsocket.subscribe("".getBytes());
    byte[] receivedmessage;
    Poller poller=context.poller();
    poller.register(reqsocket,Poller.POLLIN);
    poller.register(subsocket,Poller.POLLIN);

    reqsocket.send(msg.getBytes(),0); 

    while(!Thread.currentThread().isInterrupted())
     {

        if(poller.pollin(0))
        {
            receivedmessage=s.recv(0);

        }
          if(poller.pollin(0))
          {
            receivedmessage=subsocket.recv(0);

          }
   }
    s.close();
    context.term();

}

我错过了什么或做错了什么?

4

1 回答 1

3

看起来这有3个问题。主要的是你需要在循环中poller.poll()作为第一件事调用。while这就是为什么您没有收到任何消息的原因。

下一个问题是您正在检查两个套接字的相同索引:我希望第二个if语句需要

if(poller.pollin(1))

最后,req 套接字需要在每次接收之前发送,因此对发送的调用需要在 while 循环内,并且在poller.poll()您刚刚添加的之前:)

于 2013-07-19T08:00:53.220 回答