【发布时间】:2018-03-11 02:54:47
【问题描述】:
我正在与 Pupil Labs 合作,这是一个用于眼睛/瞳孔跟踪的大型开源软件。整个代码是用 Python 编写的。所谓Pupil Remote是基于ZeroMQ的。
如果我开始运行Filter Messages,一切都很好。出于我的目的,我需要将Filter Messages“翻译”成 Java,因为我创建了一个 Android 应用程序,它应该调用一个客户端,该客户端的目的是充当 python 客户端。
这是我到目前为止所做的:
import android.annotation.SuppressLint;
import org.zeromq.ZMQ;
import java.nio.charset.Charset;
import static java.lang.Thread.sleep;
public class ZeroMQClient {
@SuppressLint("NewApi")
public static void requestGazeData() {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket subscriber = context.socket(ZMQ.SUB);
System.out.println("Connecting to server...");
subscriber.connect("tcp://xxx.x.x.x:50020");
System.out.println("Connected");
String gaze = "gaze";
subscriber.subscribe(gaze.getBytes(Charset.forName("UTF-8")));
while (true) {
String msg = subscriber.recvStr();
System.out.println(msg);
subscriber.close();
context.term();
}
}
}
现在正如你所料,为什么我要问你,什么也没发生,我没有从 Pupil Labs 服务器收到任何数据。我把自己定位在this post,但不幸的是,它对我没有用。 IP地址和端口也与服务器上的相同。它既不能在本地工作,也不能在远程工作。
对任何答案都很满意,因为我坚持这一点。
【问题讨论】:
-
您是否完成了下面的答案中提倡的根本原因消除测试的第二部分?结果如何?
-
是的,我试过了。如果没有 Android API,我的代码可以正常工作,所以这不是因为订阅者的问题(尽管事件:我将订阅策略放在
String gaze = "gaze"; subscriber.subscribe(gaze.getBytes(Charset.forName("UTF-8")));中)。这是 android 方面的一个问题,因为由于我正在启动应用程序本身,所以它不再工作了。请联系我的其他问题(stackoverflow.com/questions/49178921/…),只要我有解决方案,我也会在这里发布。 -
那么,您能否明确确认,当 (A) 一个琐碎的 python-PUB-test-mock-up 发件人确实发送 (A) 时,您可以明确确认在测试用例中观察到的情况b>
aPubSOCKET.send("gaze:TesterMessage", zmq.DONTWAIT)在循环中 +(B) Android 已连接并订阅了subscriber.subscribe( filterPermitANY.getBytes() );+(C) Android 端的所有主题在第一条消息到达之后不是subscriber.close();context.term();吗?这是调试的重要一步,所以不要分散和转移社区成员的注意力,而是一个接一个地执行,好吗? -
@user3666197 不,你不明白。可能我解释得不够清楚,抱歉。让我们让它更简单:ZMQ 连接方式是正确的,我实现了它。我遵循了您的建议,但从技术上讲,我不必这样做,因为我的代码结果很好(作为独立解决方案)。不过还是谢谢。唯一会导致问题的是 Android 应用程序本身。
-
@user3666197 是的。我从主题
gaze中获得了所有数据。 (这里就不贴了,数据太多了)