我正在尝试使用Zeromq套接字作为C ++中的原始TCP客户端套接字。 我有一个要发送数据的不同程序中的TCP服务器。 当我将Zeromq客户端连接到服务器时,我能够从服务器接收数据,但是无法将数据发送到TCP服务器。 发送时收到以下错误:未处理的错误,zmq :: error_t 有任何想法如何使其工作吗?
zmq::context_t *ctx = new zmq::context(100, 100);
void *raw_socket = new zmq::socket_t(*ctx, ZMQ_STREAM);
zmq::socket_t *socket = static_cast<zmq::socket_t*>(raw_socket);
socket->connect("tcp://127.0.0.1:5555");
char message[] = "HELLO, WORLD!"
socket->send(message, strlen(message), ZMQ_SNDMORE)
答案 0 :(得分:0)
当您在ZMQ_STREAM
类型的套接字上发送或接收任何内容时,第一个数据帧应为一个标识符,该标识符指示后续帧应到达的位置或来自何处。
将ZMQ_STREAM
套接字用作服务器时(即,在套接字上调用bind
),则可以仅使用recv
提取此标识帧,并在响应时重新发送。 / p>
当用作客户端(即,在套接字上调用connect
)时,您需要从套接字获取身份,可以通过带有getsockopt
标志的ZMQ_IDENTITY
来实现。
身份大小限制为最大255个字节。
// get the id after you've called connect
std::size_t id_size = 256;
char id[ 256 ];
socket->getsockopt( ZMQ_IDENTITY, &id, &id_size );
// send the id frame
socket->send(id, id_size, ZMQ_SNDMORE);
// then your data
char message[] = "HELLO, WORLD!";
socket->send(message, strlen(message), ZMQ_SNDMORE);
ZMQ_STREAM上的文档详细介绍了如何通知您以及如何控制连接,断开连接等。