C++ (Qt) file.open(QFile::ReadOnly); QDataStream read(&file); lBytes = 0; char * ch; ch = (char*)malloc(sizeof(char) * 1024); ch[1023] = '\0'; while(!read.atEnd()){ int l = read.readRawData(ch, sizeof(char)*1023); QByteArray ba(ch, sizeof(char)*l); lBytes += m_pTcpSocket->write(ba, sizeof(char)*l); m_pTcpSocket->flush();// !!! проверка будет работать корректно только при первой операции записи в сокет (т.к. lBytes += ...) if (-1 == lBytes){ qWarning() << "Error"; m_pTcpSocket->close(); // !!! при ошибке будет "течь" память (буфер ch не освобождается) return; } float procentage = ((float)lBytes / package.filelength) * 100; emit setProcentage((int)procentage); }//while(!readEnd()) free((void*)ch);
m_pTcpSocket = new QTcpSocket(); connect(m_pTcpSocket, SIGNAL(connected()), SLOT(connectedServer()));
void ThreadServer::run(){ m_pTcpSocket = new QTcpSocket(); if(!m_pTcpSocket->setSocketDescriptor(socketDescriptor)){ qDebug() << m_pTcpSocket->errorString(); return; }.........
C++ (Qt)socket->connectToHost( ... );if( !socket->waitForConnected( timeout ) ){ // ОШИБКА: Соединение не произошло} // Начали передачу данных
C++ (Qt)void Server::slot_newConnection(){ QTcpSocket *client = nextPendingConnection(); if( !client ) return; Thread *t = new Thread( client ); t->start();} Thread::Thread( QTcpSocket *socket ){ Q_ASSERT( m_client ); m_client = socket; m_client->moveToThread( this );} void Thread::run(){ // работает с сокетом клиента m_client}