【发布时间】:2016-05-22 16:05:15
【问题描述】:
我最近使用Pupil 眼球追踪器开始了一个新项目。要将跟踪信息广播给他们使用ZeroMQ 的其他客户。我已经通过尝试他们简单的 Python 客户端示例验证了他们的服务器正在正确运行:
import zmq
import json
#network setup
port = "5000"
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:"+port)
# recv all messages
socket.setsockopt(zmq.SUBSCRIBE, '')
while True:
topic = socket.recv_multipart()
#msg = json.loads(topic)
print "\n\n",topic[0] #,":\n",msg
由于我的项目应该是 C++,因此我尝试使用以下 ZeroMQ 示例将其翻译成 C++:
#include "zmq.hpp"
#include <string>
#include <iostream>
int main()
{
// Prepare our context and socket
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_SUB);
std::cout << "Connecting to hello world server" << std::endl;
socket.connect("tcp://127.0.0.1:5000");
socket.setsockopt(ZMQ_SUBSCRIBE, "");
// Do 100 requests, waiting each time for a response
for (int request_nbr = 0; request_nbr != 100; request_nbr++) {
// Get the message.
zmq::message_t msg;
socket.recv(&msg);
std::cout << "Received World " << msg.data() << std::endl;
}
return 0;
}
不幸的是,这不起作用,C++ 客户端只是挂在 socket.recv(&msg);等待它从未收到的消息。
对于这个项目,我使用的是 Visual Studio 2013 和 ZeroMQ 库 libzmq-v120-mt-4_0_4.lib,它是 ZeroMQ 安装附带的(我没有编译它)。为了设置它,我使用了this 教程,而不是整个粘贴,因为我觉得它有点无关紧要。
我认为我使用的配置是 x64 而 Pupil 是 32 位,但如果我没记错的话,这应该与 ZeroMQ 无关。
Pupil 使用 pyzmq,它应该与 4.04 zmq lib 兼容。
【问题讨论】:
-
您可能想检查 Pupil 的 pyzmq 真的 是否使用 zmq 4.0.4。我个人之前也遇到过不同版本之间的兼容性问题(甚至崩溃),所以我建议你验证一下实际使用的版本。
-
Pupil 推荐 pyzmq‑14.7.0,它应该支持 4.1.x zmq。这是我能找到的信息。我可以看到他们的 libzmq.pyd 文件,但我认为我无法检查版本。值得一提的是,运行的 Python 客户端实际上使用了最新的 pyzmq,pyzmq-15.2.0-cp27
-
可以查看this等版本
-
谢谢。我为 Python 安装的 ZMQ 版本是 4.1.2。我已经设法下载并编译了最新的 Libzmq master 分支,但这并没有解决我的问题。
-
嗯。如果您在两端运行完全相同的 zmq 版本时遇到相同的问题,那么我不确定发生了什么。就我个人而言,我会开始尝试一些不同的端口,检查
netstat,尝试通过 telnet/PuTTY 手动连接等以获取更多信息。
标签: c++ visual-studio-2013 zeromq