作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码旨在显示通过网络发送的图像。我发送了一个 16 字节的 header ,我用它来计算后面的图像大小,然后读取那么多字节并显示图像。我在此链接中使用了这个概念 Tcp packets using QTcpSocket
void socket::readyRead()
{
while(socket->bytesAvailable() > 0) {
quint8 Data[16];
socket->read((char *)&Data,16);
img_size = (((quint8)Data[1]<<8)+ (quint8)Data[0]) * (((quint8)Data[3]<<8)+ (quint8)Data[2]) * 1;
QByteArray buffer = socket->read(img_size);
while(buffer.size() < (img_size))
{
// qDebug() << buffer.size();
socket->waitForReadyRead();
buffer.append(socket->read((img_size)-(buffer.size()) ));
}
unsigned char* imgdatara = (unsigned char*)&buffer.data()[0];
if( !image )
image = new QImage(imgdatara,32,640,QImage::Format_Grayscale8);
else
{
delete image;
image = new QImage(imgdatara,32,640,QImage::Format_Grayscale8);
}
emit msg(image);
}
}
我的 GUI 显示“无响应”。我该如何解决?
谢谢
最佳答案
这是 Max Schlee 的“Qt 4.8 专业编程”一书中的 100% 工作代码。这不是一个简单的问题,因为在 readyRead()
信号上你可以收到:
1.一个完整的区 block
2.只有一部分block
3.几个 block 在一起
void MyClass::onReceive()
{
QDataStream in(m_pClient);
in.setVersion(QDataStream::Qt_4_6); // Your version. Not necessary.
for(;;)
{
if(m_nextBlockSize == 0)
{
if(m_pClient->bytesAvailable() < sizeof(m_nextBlockSize))
{
break;
}
else
{
in >> m_nextBlockSize;
}
}
if(m_pClient->bytesAvailable() < m_nextBlockSize)
{
break;
}
// Here you have each complete block
processYourBlockHere(); // <=====
m_nextBlockSize = 0;
}
}
更新:对您有用的链接:Serializing Qt Data Types和 QDataStream
关于c++ - 在 Qtcp readyRead() 中读取可变长度消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311474/
以下代码旨在显示通过网络发送的图像。我发送了一个 16 字节的 header ,我用它来计算后面的图像大小,然后读取那么多字节并显示图像。我在此链接中使用了这个概念 Tcp packets using
所以,这里我有一些复杂的客户端-服务器应用程序,它的某些部分打开端口用于监听和进一步的网络交互。使用了QTcpServer + QTcpSocket(下面会详细介绍)。 应用程序的这个“网络层”在任何
我想创建一个 Http 服务器来发送 MJPEG 流。我已经可以发送图片,但不能发送直播。 我做了什么:创建了一个 TCP 服务器。当客户端连接时,会创建一个 TCP-Socket。然后我实现了一个
我是一名优秀的程序员,十分优秀!