Показать сообщение отдельно
Старый 17.04.2013, 00:46
Casperovskii вне форума Посмотреть профиль Отправить личное сообщение для Casperovskii Найти все сообщения от Casperovskii
  № 11  
Ответить с цитированием
Casperovskii

Регистрация: Mar 2013
Сообщений: 5
Всем привет! У меня очередная проблема, боролся месяц, сам не смог победить. Хабр, друзья и другой форум не помогли . Итак, у меня есть во Flash:
Код AS3:
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. Если нужен другой код (объявление треда или код самого треда и так далее, готов предоставить. Но проблема именно в цикле/отправке данных обратно на клиент).