gusucode.com > qt实现的多线程服务器和客户端源码程序 > qt实现的多线程服务器和客户端源码程序/qtserver/server/clientsocket.cpp
#include <QtDebug> #include <QtNetwork> #include <QSqlQuery> #include "clientsocket.h" ClientSocket::ClientSocket(QObject *parent) : QTcpSocket(parent) { connect(this, SIGNAL(readyRead()), this, SLOT(readClient())); // connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater())); nextBlockSize = 0; } void ClientSocket::readClient() { QDataStream in(this); in.setVersion(QDataStream::Qt_4_3); if (nextBlockSize == 0) { if (bytesAvailable() < sizeof(quint16)) return; in >> nextBlockSize; } if (bytesAvailable() < nextBlockSize) return; quint8 requestType; QString sql; in >> requestType; switch(requestType){ case 'L':{//login in >> sql; qDebug() << sql; bool s = checkLogin(sql); QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_3); if (s){ nextBlockSize = 0; out << quint16(0) << QString("LTRUE"); // disconnectFromHost(); // close(); }else{ nextBlockSize = 0; out << quint16(0) << QString("LFALSE"); } out.device()->seek(0); out << quint16(block.size() - sizeof(quint16)); write(block); out << quint16(0xFFFF); // out << quint16(0xFFFF); break; } } } bool ClientSocket::checkLogin(const QString &sql) { QSqlQuery q; q.exec(sql); if (q.next()) { if(q.value(0).toInt()>0) return true; else return false; q.clear(); } return false; }