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

Unable to send data from Zeromq client to TCP server

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

当你在 ZMQ_STREAM 类型的套接字上发送或接收任何东西时,第一个数据帧应该是一个标识符,指示后续帧应该去哪里或来自哪里。

当使用 ZMQ_STREAM 套接字作为服务器时(即您在套接字上调用 bind),那么您可以使用 recv 提取此标识帧并在您响应时重新发送它.

当用作客户端时(即您在套接字上调用 connect)然后您需要从套接字获取身份,您可以通过 getsockoptZMQ_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 上的文档更详细地介绍了如何通知您以及如何控制连接、断开连接等。