Всем привет! Не стал создавать новую тему, возникла очередная проблема с С++. боролся месяц, сам не смог победить. Хабр, друзья и другой форум не помогли . Итак, у меня есть во Flash:
Код: Выделить всё
public function dataWrite(e:Event):void { clientSocket.writeUTFBytes(fieldToWrite.text);//сокет, подключенный к серву на QT clientSocket.flush(); trace(clientSocket.bytesAvailable, clientSocket.connected); fieldToWrite.text = "";//текстовое поле, из которого берем строку для передачи fieldToWrite.setFocus(); }
И код функции на сервере, которая должна срабатывать каждый раз, когда любой из клиентов посылает строчку:
Код:
Код: Выделить всё
void multiServer::sendDataToForm(int socDesc, QString txt){ qDebug()<<listOfThreads.size(); //листстредов - всех клиентов, выводим его размер qDebug()<<txt;//считанный с любого из клиентов текст QString txt2 = QString::number(socDesc) + ";" + txt; emit sendingData(MainWindow::DATAINCOME,txt2);//отправляем считанный текст в гуи for (int i = 0;i<listOfThreads.size();i++) //цикл отправки всем клиентам сообщения { QByteArray myByteArray;//отправляем listOfThreads[i]->socket->write(myByteArray.append(QString("Client written;") + QString::number(socDesc) + ";" + txt)); qDebug()<<myByteArray; }}
Проблема в следующем: если отсутствует цикл, то сервер считывает все сообщения прекрасно, но, естественно, ничего не отсылает назад. Если цикл есть, то сервер считывает первое сообщение, отсылает его всем клиентам и больше не может считать ни одного сообщения, кроме вновь подключившегося клиента. Добавление в цикл для сокета функций waitforreadyread() и flush() не помогло. Прошу вашей помощи. Спасибо за внимание.
P.S. Если нужен другой код (объявление треда или код самого треда и так далее, готов предоставить. Но проблема именно в цикле/отправке данных обратно на клиент).