如何从ZeroMQ库中抛出此异常?

时间:2017-10-03 07:06:23

标签: android zeromq

我在android中使用ZeroMQ来连接两个设备,我得到一个例外,即 org.zeromq.ZMQException: Errno 48 : Address already in use

这是我的代码:

ZMQ.Socket socket = context.socket(             ZMQ.REP );
                            socket.setLinger(   0 );
                            socket.setSndHWM(   0 );
                            socket.setIPv4Only( false );
                            socket.bind(       "tcp://myIP:port" );

while( !Thread.currentThread().isInterrupted() ) {
        byte[] msg = socket.recv( 0 );
        uiThreadHandler.sendMessage( Util.bundledMessage( uiThreadHandler,
                                                          new String( msg )
                                                          )
                                     );
        socket.send( new String( Util.reverseInPlace( msg ) ),
                     0
                     );
}
socket.close();
context.term();
}



ZMQ.Context context = ZMQ.context( 1 );
ZMQ.Socket   socket =     context.socket(          ZMQ.SUB );
                                  socket.connect( "tcp://myIP:port" );
                                  socket.send(     params[0].getBytes(),
                                                   0
                                                   );
String result = new String(       socket.recv( 0 ) );
                                  socket.close();
context.term();
return result;

2 个答案:

答案 0 :(得分:1)

这是ZeroMQ中的常见状态。 .bind()问道,但O / S可以&拒绝......

操作系统被拒绝以允许 .bind() 方法触及此类<address>:<port#>,即O / S资源管理器仍认为不是免费且可用的在通话时重复使用。

由于这个原因,ZeroMQ文档建议:

  

错误处理   
  绑定应该使用语言的标准错误机制,无论是错误代码,异常等。

因此,正确的异常处理始终留给用户代码。这是设计师的角色和责任,为这样的案例定义,采取了哪些措施和措施来纠正下一步将要发生的整体战略。

在原型制作过程中,通常会陷入死锁或尚未释放的地址:端口,因此有时只使用外部重置,重启可以提供缺少的步骤,使玩具按预期进行相应操作。

+1用于设计代码并采取预防措施...... ZMQ_LINGER 是典型的此类案例。始终自动执行此操作。它可以节省你的调试时间。

所以,请继续关注并享受ZeroMQ 的强大功能。

答案 1 :(得分:0)

ZMQ.REP / ZMQ.REQ 将要求成对执行发送,接收,发送,接收... 。如果您的消息传递是单向的,请考虑使用<代替strong> ZMQ.PULL / ZMQ.PUSH 。