#include "serverthread.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif serverThread::serverThread(qintptr sockDesc, QObject *parent): QThread(parent), m_sockDesc(sockDesc) { qRegisterMetaType("qintptr"); } serverThread::~serverThread() //当线程容器本身消亡时 断开其控制的Socket连接 { m_socket->close(); } void serverThread::run(void) //线程容器这辈子要干的事 { m_socket = new MySocket(m_sockDesc); if (!m_socket->setSocketDescriptor(m_sockDesc)) //向套接字设立唯一标识符 { return ; } connect(m_socket, &MySocket::disconnected, this, &serverThread::disconnectToHost); //当Socket套接字连接断开时当前线程容器怎么做 connect(m_socket, SIGNAL(IMGdataReady(const QString&, const QByteArray&, QString)),//Save 这里只是线程容器把Socket接收到的信息转发至Server套接字列表 this, SLOT(IMGrecvDataSlot(const QString&, const QByteArray&, QString))); connect(m_socket, SIGNAL(LiveViewIMG(qintptr, QImage)),//Live View 这里只是线程容器把Socket接收到的信息转发至Server套接字列表 this, SLOT(LiveViewIMGSlot(qintptr, QImage))); connect(this, SIGNAL(sendData(QString, const QByteArray&)), //传递Server要求某套接字发送信息 m_socket, SLOT(sendData(QString, const QByteArray&))); m_sockDesc_IP= m_socket->peerAddress().toString().remove(0, 7); emit ShowIP(m_sockDesc_IP);//把这个socket连接的IP告知Server this->exec();//这个位置? } void serverThread::sendDataSlot(QString IP, const QByteArray &data) //中转 由Server告知某Socket发送信息 { if (data.isEmpty()) { return ; } emit sendData(IP, data); } void serverThread::IMGrecvDataSlot(const QString &ip, const QByteArray &data ,QString ImgName) //中转 Socket把要存储的照片交付Server { emit IMGdataReady(ip, data,ImgName); } void serverThread::LiveViewIMGSlot(qintptr id , QImage img) //中转 Socket把要预览的照片交付 { emit LiveViewIMG(id,img); } void serverThread::disconnectToHost()//告知总ServerList容器里的套接字已经结束连接 同时线程容器本身也就没用了 { emit disconnectTCP(m_sockDesc_IP); m_socket->disconnectFromHost(); this->quit(); }