带有 msgpack 的 ZeroMQ 在 C++ 中抛出无效参数错误
ZeroMQ with msgpack, in C++, throws an invalid argument error
我正在使用 zeromq 从使用 msgpack 进行序列化的应用程序中读取数据。代码编译良好,但在 运行 时抛出参数无效错误。我哪里错了。
错误如下:
在抛出 'zmq::error_t'
的实例后终止调用
what(): 无效参数
中止(核心转储)
这是代码。
#include <zmq.hpp>
#include <iostream>
#include <sstream>
#include <msgpack.hpp>
#include <string>
int main(int argc, char *argv[]){
zmq::context_t context (1);
// Open a req port to talk to application
std::string addr = "tcp://127.0.0.1";
std::string req_port = "55555";
zmq::socket_t req (context, ZMQ_REQ);
req.connect(addr+req_port);
// Ask for the subport
zmq::message_t subPortRequest (8);
memcpy (subPortRequest.data(), "SUB_PORT", 8);
req.send(subPortRequest);
zmq::message_t reply;
req.recv(&reply);
std::string sub_port = std::string(static_cast<char*>(reply.data()), reply.size());
std::cout << sub_port << std::endl;
// Open a sub port to listen to application
zmq::socket_t sub (context, ZMQ_SUB);
std::cout << addr+sub_port << std::endl;
sub.connect(addr+sub_port);
// subscriptions to everything
sub.setsockopt(ZMQ_SUBSCRIBE, "", strlen(""));
while(1){
zmq::message_t reply_topic;
sub.recv(&reply_topic);
std::string topic = std::string(static_cast<char*>(reply_topic.data()), reply_topic.size());
zmq::message_t reply_msg;
sub.recv(&reply_msg);
std::string msg = std::string(static_cast<char*>(reply_msg.data()), reply_msg.size());
msgpack::object_handle oh = msgpack::unpack(msg.data(), msg.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
}
}
很可能 string
不符合规格:
虽然消息来源指示这样做:
zmq::socket_t req ( context, ZMQ_REQ ); // __________.SET [REQ] access point
// Open a req port to talk to application ____________.SET strings
std::string addr = "tcp://127.0.0.1"; // _________.SET "IP"-part
std::string req_port = "55555"; // _________.SET "PORT#"-part
req.connect( addr + req_port ); // _________.CONNECT( "IP"+"PORT#" )
ZeroMQ .connect()
方法应该得到一个关于这个形状的字符串:
.connect( "tcp://127.0.0.1:55555" );
------------------------------------------------^
无论如何,享受使用 ZeroMQ
的力量构建智能分布式系统
我正在使用 zeromq 从使用 msgpack 进行序列化的应用程序中读取数据。代码编译良好,但在 运行 时抛出参数无效错误。我哪里错了。
错误如下: 在抛出 'zmq::error_t'
的实例后终止调用what(): 无效参数 中止(核心转储)
这是代码。
#include <zmq.hpp>
#include <iostream>
#include <sstream>
#include <msgpack.hpp>
#include <string>
int main(int argc, char *argv[]){
zmq::context_t context (1);
// Open a req port to talk to application
std::string addr = "tcp://127.0.0.1";
std::string req_port = "55555";
zmq::socket_t req (context, ZMQ_REQ);
req.connect(addr+req_port);
// Ask for the subport
zmq::message_t subPortRequest (8);
memcpy (subPortRequest.data(), "SUB_PORT", 8);
req.send(subPortRequest);
zmq::message_t reply;
req.recv(&reply);
std::string sub_port = std::string(static_cast<char*>(reply.data()), reply.size());
std::cout << sub_port << std::endl;
// Open a sub port to listen to application
zmq::socket_t sub (context, ZMQ_SUB);
std::cout << addr+sub_port << std::endl;
sub.connect(addr+sub_port);
// subscriptions to everything
sub.setsockopt(ZMQ_SUBSCRIBE, "", strlen(""));
while(1){
zmq::message_t reply_topic;
sub.recv(&reply_topic);
std::string topic = std::string(static_cast<char*>(reply_topic.data()), reply_topic.size());
zmq::message_t reply_msg;
sub.recv(&reply_msg);
std::string msg = std::string(static_cast<char*>(reply_msg.data()), reply_msg.size());
msgpack::object_handle oh = msgpack::unpack(msg.data(), msg.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
}
}
很可能 string
不符合规格:
虽然消息来源指示这样做:
zmq::socket_t req ( context, ZMQ_REQ ); // __________.SET [REQ] access point
// Open a req port to talk to application ____________.SET strings
std::string addr = "tcp://127.0.0.1"; // _________.SET "IP"-part
std::string req_port = "55555"; // _________.SET "PORT#"-part
req.connect( addr + req_port ); // _________.CONNECT( "IP"+"PORT#" )
ZeroMQ .connect()
方法应该得到一个关于这个形状的字符串:
.connect( "tcp://127.0.0.1:55555" );
------------------------------------------------^
无论如何,享受使用 ZeroMQ
的力量构建智能分布式系统