我的项目跟网游的更新差不多,服务器端监听端口,有连接就给对方传文件。
在网上找了一段代码,改了下,有错误
 
void Server::incomingConnection(int sockedId)
{
    qDebug()<<"连接成功";
     //tcpSocket->setSocketDescriptor(sockedId);
 
    filePath = QFileDialog::getOpenFileName(this);
 
    QFile file(filePath);
    if(!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(this, tr("Error"),tr("文件名错误!请输入有效的文件名及路径。"),QMessageBox::Close);
        disconnectFromHost();
        return;
    }
 
    ui->stateLbl->setText("开始发送!!!");
    QString fileName = file.fileName();
    fileName = fileName.remove(0, fileName.lastIndexOf('/')+1);
 
    qint64 size;
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);
 
    out << qint16(0x0001) << fileName.toUtf8();
    size = block.size();
 
    write((char*)&size, sizeof(qint64));
    write(block.data(), size);
    //flush();   
 
    if(!waitForBytesWritten(-1))    {
        qDebug() << "writen Bytes error " << QIODevice::errorString();
        //throw 2;
    }
    do
    {
        block.clear();
        out.device()->seek(0);
        out << qint16(0x0002) << file.read(0xFFF0);
        size = block.size();
        qDebug() << "Send Data " << size << " byte.";
 
        write((char*)&size, sizeof(qint64));
        write(block.data(), size);
        if(!waitForBytesWritten(-1))
        {
            qDebug() << "writen Bytes error " << QIODevice::errorString();
            //throw 2;
        }
    }while(!file.atEnd());
 
    sendEOF();
 
 
    qDebug() << "发送完成!!!";
    ui->stateLbl->setText("发送完成!!!");
    forever/*(int i=0; i < 10; i++)*/
    {
        if(!waitForDisconnected())
        {
            //sendEOF();
        }
        else
        {
            //qDebug() << "Number is " << i << ".";
            qDebug() << "GoTo return.";
            return;
        }
    }
       disconnectFromHost();        // have Error.
}
 
 执行到if(!waitForBytesWritten(-1)) 这句,就会中断,报的错误是:
QAbstractSocket::waitForDisconnected() is not allowed in UnconnectedState
 
求高手解答下  谢谢