Добрый день.
Собственно, клиент-сервер на QTcpSocket.
Сервер должен многопоточно обрабатывать приходящие сообщения от клиентов.
Проблема - С сокета не получается читать (количество доступных байт - 0), хотя сигнал readyRead() появляется.
Немного кода
В конструктор класса-наследника QThread передается дескриптор.
MyThread::MyThread(int intsocket)
{
socket = new QTcpSocket;
this -> intsocket = intsocket;
socket->setSocketDescriptor(intsocket);
blocksize = 0;
}
В run() - собственно попытка вытащить из сокета сообщение.
void MyThread::run()
{
std::cout << socket->bytesAvailable() << std::endl;
// попробуем вытащить размер
QDataStream stream(socket);
if (blocksize == 0) {
if (socket -> bytesAvailable() < (int)sizeof(qint64))
return;
stream >> blocksize;
}
std::cout << blocksize << std::endl;
// Теперь ожидаем сообщение заданного размера
if (socket -> bytesAvailable() < blocksize)
return;
stream >> message;
blocksize = 0;
// Сообщение получено - обработаем.
IncomingMesssage();
}
QTcpServer и обработка его сигнала connected().
void MyServer::NewConnect()
{
// std::cout << "New connection:" << std::endl;
client = server.nextPendingConnection();
int intsocket = client -> socketDescriptor();
threads[intsocket] = new MyThread(intsocket);
connect(client, SIGNAL(readyRead()), threads[intsocket], SLOT(start()), Qt::DirectConnection);
connect(client, SIGNAL(error(QAbstractSocket::SocketError)), threads[intsocket], SLOT(SocketError(QAbstractSocket::SocketError)), Qt::DirectConnection);
}
Ну и вопрос - как решать проблему?