您必须使用一段时间,因为在读取数据时您可以获得另一个数据:
int SocketReceiver::events(){ int events = 0; std::size_t eventsSize = sizeof(events); zmq_getsockopt(m_Subscriber,ZMQ_EVENTS, &events, &eventsSize); return events; } void SocketReceiver::readZMQData() { m_SocketNotifier->setEnabled(false); while (events() & ZMQ_POLLIN) { zmq_msg_t message; zmq_msg_init(&message); zmq_recvmsg(m_Subscriber, &message, 0); size_t size = zmq_msg_size (&message); AppDebug(QString("Message Size: %1").arg(size)); char *string = static_cast<char*>(malloc(size + 1)); memcpy (string, zmq_msg_data(&message), size); zmq_msg_close (&message); string [size] = 0; if (string) { QByteArray frame = QByteArray::fromBase64(QByteArray(string)); free(string); AppDebug(QString("Debug RX Frame Size: %1").arg(frame.size())); QFile output("/tmp/abcd.jpeg"); if ( output.open(QIODevice::WriteOnly) ) { output.write(frame); output.close(); } } } m_SocketNotifier->setEnabled(true); }