我正在尝试将jeromq用于android项目。我需要连接到另一个经销商设备。这是我的代码:
ZContext zcontext = new ZContext(1);
ZMQ.Socket zsocket = zcontext.createSocket(ZMQ.DEALER);
String identity = "S61_phone";
zsocket.setIdentity(identity.getBytes(ZMQ.CHARSET));
zsocket.connect("tcp://my_other_device");
zsocket.send("test",0);
在连接呼叫中,发生错误:
2019-09-26 16:59:53.033 18347-18379 /? E / AndroidRuntime:致命例外:Thread-4进程:com.flir.flironeexampleapplication,PID:18347 java.lang.NoSuchMethodError:没有虚拟方法clear()Ljava / nio / ByteBuffer;在类Ljava / nio / ByteBuffer中;或其上级类(“ java.nio.ByteBuffer”的声明出现在/system/framework/core-oj.jar中)在zmq.Signaler.send(Signaler.java:97)在zmq.Mailbox.send(Mailbox.java:71)在zmq.Ctx.sendCommand(Ctx.java:517)在zmq.ZObject.sendCommand(ZObject.java:382)在zmq.ZObject.sendPlug(ZObject.java:185)在zmq.ZObject.sendPlug(ZObject.java:175)在zmq.Own.launchChild(Own.java:115)位于zmq.SocketBase.addEndpoint(SocketBase.java:590)在zmq.SocketBase.connect(SocketBase.java:582)在org.zeromq.ZMQ $ Socket.connect(ZMQ.java:2531)在com.flir.flironeexampleapplication.GLPreviewActivity.onDeviceConnected(GLPreviewActivity.java:115)在com.flir.flironesdk.EmbeddedDevice $ 4.run(EmbeddedDevice.java:512)在java.lang.Thread.run(Thread.java:764)
我的环境:
任何问题的想法?非常感谢。
如果有人从未使用ZeroMQ,您可能会喜欢这里先看看“ ZeroMQ Principles in less than Five Seconds”或查看other posts here在深入了解更多细节之前
鉴于代码甚至没有尝试检测,处理与ZeroMQ相关的潜在错误状态(在ZeroMQ API中有充分记录)的工作量也就越少,问题的“远程”检查范围也就有限。因此,主要疑问(无法测试的嫌疑人)来自zsocket.connect("tcp://my_other_device");
在这里使用tcp://
的ZeroMQ transport-class的选择,除了上述传输类选择器<tcp://>
之外,还需要明确的合法值规范都
<address-part>
== { IP_ADDRESS | symbolic_name_resolvable_to_IP_ADDRESS }
和
<port-part>
== ":<aLegalTcpPortNUMBER>"
用于正确的协议引擎设置,显然在发布的代码示例中缺少。最后但并非最不重要的是,在许多情况下,发送可能且在法律上必须抛出异常:
(如API中所记录:)
EAGAIN
已请求非阻止模式,并且此刻无法发送消息。ENOTSUP
此套接字类型不支持zmq_send()
操作。EINVAL
发送方尝试发送多部分数据,套接字类型不允许。EFSM
由于套接字未处于适当的状态,因此目前无法在此套接字上执行zmq_send()
操作。在几种状态之间切换的套接字类型(例如ZMQ_REP
)可能会发生此错误。有关更多信息,请参见zmq_socket(3)
的消息传递模式部分。ETERM
与指定套接字关联的ØMQ上下文已终止。ENOTSOCK
提供的套接字无效。EINTR
在发送消息之前,操作已被信号传递中断。EHOSTUNREACH
该消息无法路由。