最近、Pupilアイトラッカーで新しいプロジェクトを開始しました。追加のクライアントに追跡情報をブロードキャストするには、ZeroMQを使用します。私は自分のサーバーが正しく彼らのシンプルなPythonクライアントの例を試みることによって実行されていることを確認しました:ZeroMQ C++クライアントが受信していません
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
私のプロジェクトは、私はこのようなZeroMQ例使用してC++でそれを翻訳しようとしている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インストールに付属のZeroMQライブラリlibzmq-v120-mt-4_0_4.libを使用しています(私はそれをコンパイルしませんでした)。それを設定するために私はthisチュートリアルを使用しました。
私が使用する構成はx64ですが、瞳孔は32ビットですが、私は誤解しない限り、これはZeroMQとは関係ありません。
瞳孔はpyzmqを使用します。これは4.04 zmq libと互換性があります。
あなたは生徒のpyzmqが_really_ zmq 4.0.4を使用しているかどうかを確認することをお勧めします。個人的に私は以前のバージョン間で互換性の問題がありました(クラッシュさえも)ので、実際のバージョンを確認することをお勧めします。 – mindriot
生徒は、4.1.x zmqをサポートするはずのpyzmq-14.7.0をお勧めします。これは私が見つけることができる情報です。私は彼らのlibzmq.pydファイルを見ることができますが、私はバージョンを確認することはできないと思います。価値のあるものについては、実行中のPythonクライアントは実際に最新のpyzmqを使用しています。pyzmq-15.2.0-cp27 – Elena
[this](http://zguide.zeromq.org/py:version)のようなバージョンを確認できます – mindriot