myTcpSocket::myTcpSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程 QTcpSocket(parent),socketID(socketDescriptor) { this->setSocketDescriptor(socketDescriptor); cov = new PinYinConvert; connect(this,&myTcpSocket::readyRead, [&](){ QTime time; time.start(); QString str(this->readAll()); QElapsedTimer tm; tm.start(); while(tm.elapsed() < 99) {} str = cov->convertToPY(str); qDebug() << time.elapsed(); this->write(str.toUtf8()); }); dis = connect(this,&myTcpSocket::disconnected, [&](){ emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息 }); }
void MyTcpServer::sockDisConnectSlot(int handle,const QString & ip, quint16 prot,QThread * th) { myTcpSocket * tcp = tcpClient->value(handle); tcpClient->remove(handle);//连接管理中移除断开连接的socket ThreadHandle::getClass().removeThread(th); //告诉线程管理类那个线程里的连接断开了 delete tcp;//释放断开连接的资源 emit sockDisConnect(handle,ip,prot); }
ClientSocket::ClientSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程 QTcpSocket(parent),socketID(socketDescriptor),userID(-1),lastsize(0),aes(nullptr) { this->setSocketDescriptor(socketDescriptor); connect(this,&ClientSocket::readyRead,this,&ClientSocket::clientData); connect(this,&ClientSocket::disconnected, [&]() { emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息 this->deleteLater(); }); }
TcpSocket::TcpSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程 QTcpSocket(parent), socketID(socketDescriptor) { this->setSocketDescriptor(socketDescriptor); connect(this,&TcpSocket::readyRead,this,&TcpSocket::readData); dis = connect(this,&TcpSocket::disconnected,[&](){ emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息 this->deleteLater(); }); connect(&watcher,&QFutureWatcher<QByteArray>::finished,this,&TcpSocket::startNext); connect(&watcher,&QFutureWatcher<QByteArray>::canceled,this,&TcpSocket::startNext); }
void TcpServer::sockDisConnectSlot(int handle,const QString & ip, quint16 prot,QThread * th) { tcpClient->remove(handle);//连接管理中移除断开连接的socket ThreadHandle::getClass().removeThread(th); //告诉线程管理类那个线程里的连接断开了 emit sockDisConnect(handle,ip,prot); }