我在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;
答案 0 :(得分:1)
.bind()
问道,但O / S可以&拒绝...... 操作系统被拒绝以允许 .bind()
方法触及此类<address>:<port#>
,即O / S资源管理器仍认为不是免费且可用的在通话时重复使用。
错误处理
绑定应该使用语言的标准错误机制,无论是错误代码,异常等。
因此,正确的异常处理始终留给用户代码。这是设计师的角色和责任,为这样的案例定义,采取了哪些措施和措施来纠正下一步将要发生的整体战略。
在原型制作过程中,通常会陷入死锁或尚未释放的地址:端口,因此有时只使用外部重置,重启可以提供缺少的步骤,使玩具按预期进行相应操作。
+1用于设计代码并采取预防措施...... ZMQ_LINGER
是典型的此类案例。始终自动执行此操作。它可以节省你的调试时间。
所以,请继续关注并享受ZeroMQ distributed-computing的强大功能。
答案 1 :(得分:0)
ZMQ.REP / ZMQ.REQ 将要求成对执行发送,接收,发送,接收... 。如果您的消息传递是单向的,请考虑使用<代替strong> ZMQ.PULL / ZMQ.PUSH 。