#include "cserver.h"
#include "ui_cserver.h"
CServer::CServer(QWidget *parent) :
QWidget(parent),
ui(new Ui::CServer)
{
ui->setupUi(this);
tcpServer = new QTcpServer(this);
//tcpServerConnection = new QTcpSocket(this);
image = new QImage();
if(!tcpServer->listen(QHostAddress::Any, 5566))
{
QMessageBox::critical(this, tr("fortune server"), tr("无法开启服务器:%l").arg(
tcpServer->errorString()));
close();
return;
}
//信号
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFrotune()));
}
CServer::~CServer()
{
delete ui;
delete tcpServer;
delete image;
//delete tcpServerConnection;
}
//连接失败反馈
void CServer::displayError(QAbstractSocket::SocketError)
{
tcpServerConnection->close();
ui->lbl_msg->setText("已断开连接!");
}
//构建连接,通过信号触发函数
void CServer::sendFrotune()
{
baSize = 0;
tcpServerConnection = tcpServer->nextPendingConnection();
connect(tcpServerConnection, SIGNAL(readyRead()), this, SLOT(receiveData()));
connect(tcpServerConnection, SIGNAL(error(QAbstractSocket::SocketError)), this,
SLOT(displayError(QAbstractSocket::SocketError)));
}
//服务器内处理图片
QByteArray CServer::getData(QString fromImg)
{
QImage image(fromImg);
QByteArray block;
QBuffer buffer(&block);
image.save(&buffer, "JPG");
QByteArray cc = qCompress(block, 1);
QByteArray hh;
hh = cc.toBase64();
return hh;
}
//接收数据
void CServer::receiveData()
{
ui->lbl_test->setText("111"); //*****
QByteArray message;
QDataStream in(tcpServerConnection);
in.setVersion(QDataStream::Qt_5_6);
//判断接收的数据是否有两字节(文件大小信息)
//如果有则保存到basize变量中,没有则返回,继续接收数据
if(baSize == 0)
{
if(tcpServerConnection->bytesAvailable() < (int)sizeof(quint64))
{
return;
}
in >> baSize;
}
//判断是否全部接受
if(tcpServerConnection->bytesAvailable() < baSize)
{
return;
}
in >> message;
//showImage(message);
ui->lbl_test->setText(QString(message)); //*****
}
//转码并显示图像
void CServer::showImage(QByteArray ba)
{
QString ss = QString::fromLatin1(ba.data(), ba.size());
QByteArray rc;
rc = QByteArray::fromBase64(ss.toLatin1());
QByteArray rdc = qUncompress(rc); //解压缩
QImage image;
image.loadFromData(rdc);
ui->lbl_camera->setPixmap(QPixmap::fromImage(image));
ui->lbl_msg->setText("视频播放中!");
update();
}