无法将数据从Zeromq客户端发送到TCP服务器

时间:2019-02-05 09:04:12

标签: c++ visual-studio-2013 tcp zeromq

我正在尝试使用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)

1 个答案:

答案 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上的文档详细介绍了如何通知您以及如何控制连接,断开连接等。