我的项目跟网游的更新差不多,服务器端监听端口,有连接就给对方传文件。
在网上找了一段代码,改了下,有错误
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
求高手解答下 谢谢