在C++ ZMQ发布程序中,我将字符串打包到message_t中,如下所示:
int main()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUB);
socket.bind("tcp://*:5555");
socket.setsockopt(ZMQ_CONFLATE, 1);
std::cout << "Server Up and Sending\n";
while(true)
{
std::string str = "Hello from C++!";
zmq::message_t msg(str.data(), str.length());
bool ret = socket.send(msg);
if(ret)
{
std::cout << "Sending\n";
}
}
return 0;
}我正在尝试弄清楚如何在JeroMQ (Java ZMQ)中接收;到目前为止,我得到的是:
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.SUB);
socket.connect("tcp://localhost:5555");
socket.subscribe("".getBytes());
while(true)
{
String msg = socket.recvStr();
System.out.println(msg);
}同样在PyZMQ (Python ZMQ)中:
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
address = 'tcp://localhost:5555'
socket.connect(address)
socket.setsockopt_string(zmq.SUBSCRIBE, unicode(''))
print "start"
print "connecting to ", address
while True:
try:
msg = socket.recv_string()
print msg但是,无论是我JeroMQ尝试还是我的PyZMQ尝试都不会收到字符串消息。
发布于 2018-07-31 03:16:51
尝试使用pyzmq订阅此代码片段
import zmq
import time
port = "5555"
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, '')
socket.setsockopt(zmq.CONFLATE, 1) # last msg only.
socket.connect("tcp://localhost:%s" % port) # must be placed after above options.
while 1:
time.sleep(1)
data = socket.recv()
print data笔记
如果不起作用,请在您的C++ ZeroMQ publisher中删除以下行:
socket.setsockopt(ZMQ_CONFLATE, 1);
发布于 2018-07-31 18:15:11
您正在发送一个C字符串(没有null结尾)。
您正在尝试接收python或java字符串。
它们可能不兼容,并且recvStr / recv_string可能正在阻塞,等待字符串结束位置的详细信息。
只需使用标准的recv函数(而不是字符串版本)。
https://stackoverflow.com/questions/44836564
复制相似问题