QT文件传送有关问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码
QT文件传送问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码

不知道为什么,传送完第一个文件第二个文件死活传送不过来了..求解;;用QT做的
不知道为什么,传送完第一个文件第二个文件死活传送不过来了..求解;;用QT做的
这是接收端
void UpDateClient::readMessage()
{
ui.m_display->setText("即将开始更新");
switch(m_state)
{
case ReadMsg:
{ ui.m_display->setText("即将开始更新1");
if(m_tcpClient->size()>=512&&m_tcpClient->isReadable())
{
QByteArray _i1=m_tcpClient->read(512);
QDataStream _inSize(_i1);
_inSize>>m_fileSize;
/* qDebug()<<m_fileSize;*/
qDebug()<<"接收到更新邀请";
/* m_fileName=m_localFile.right(m_localFile.length()-m_localFile.indexOf("/")-1);*/
}
if(m_fileSize!=0)
{
QByteArray _name;
QDataStream _in(&_name,QIODevice::WriteOnly);
int _type1=sendname;
_in<<_type1;
_name.resize(512);
m_tcpClient->write(_name);
qDebug()<<"确认更新邀请,请求获取更新文件名";
m_state= UpdaName;
}
}break;
case UpdaName:
{
QByteArray _i1=m_tcpClient->read(512);
QDataStream _inSize1(_i1);
_inSize1>>m_localFile;
qDebug()<<"开始获取更新文件名";
if(!m_localFile.isEmpty())
{
qDebug()<<"成功获取更新文件名";
QDataStream _in1(&_i1,QIODevice::WriteOnly);
int _type=UpdateCmdResult;
bool _updata=true;
_in1<<_type<< _updata;
_i1.resize(512);
m_tcpClient->write(_i1);
m_state= UpdateDescribe;
m_file.setFileName(m_localFile);
m_file.open(QIODevice::WriteOnly);
}
else
{ qDebug()<<"更新文件名不正确";
m_state=ReadMsg;
}
}break;
case UpdateDescribe:
{
qDebug()<<"开始更新,确认报文";
if(m_tcpClient->size()>512&&m_tcpClient->isReadable())
{
QByteArray _inBlock;
_inBlock=m_tcpClient->read(512);
m_file.write(_inBlock,_inBlock.size());
qDebug()<<"一个文件完成更新0;";
if(m_file.size()>=m_fileSize)
{
m_file.close();
_inBlock.resize(0);
m_fileSize=0;
m_localFile="";
m_state=ReadMsg; //文件接受完毕,向客户端请求发起下一个文件的发送
qDebug()<<"一个文件完成更新;";
}
}
else{
qDebug()<<"文件大小不足512 OR 不可读";
}
switch(m_state)
{
case None://向客户端发送更新邀请
{
if(m_files.size())
{
auto _file = m_files.last();
QByteArray _byte;
QDataStream _s(&_byte,QIODevice::WriteOnly);
_s << _file.size();
_s << _file.lastModified();
_s << UpdateCmd;
_s << 512;
_byte.resize(512);
m_socket->write(_byte);
m_state = UpdateName;
qDebug()<<"发起更新申请";
}
}break;
case UpdateName:
{
if(m_socket->size() >= 512 && m_socket->isReadable())
{
QByteArray _byte = m_socket->read(512);
QDataStream _stream(_byte);
int _type = 0;
_stream >> _type;
if(_type == sendname)
{
QByteArray _byte1;
auto _file = m_files.last();
QDataStream _s1(&_byte1,QIODevice::WriteOnly);
_s1<<_file.fileName();/*canonicalFilePath();*//*canonicalFilePath*/
/* qDebug()<<_file.canonicalFilePath();*/
m_socket->write(_byte1);
_byte1.resize(512);
qDebug()<<"发送更新文件名";
m_state = WaitCmdResult;
}
}
else
{
m_state=None;
}
}
case WaitCmdResult://等待接收客户端邀请回复
{
if(m_socket->size() >= 512 && m_socket->isReadable())
{ qDebug()<<"333";
QByteArray _byte = m_socket->read(512);
QDataStream _stream(_byte);
bool _update = true;
int _type = 0;
_stream >> _type;
_stream >> _update;
if(_type == UpdateCmdResult && _update)
{
m_state = Update;
m_currentFile.setFileName(m_files.last().absoluteFilePath());
m_currentFile.open(QIODevice::ReadOnly);
qDebug()<<"接收到更新确认,开始更新";
}
}
else
{
m_state = None;
qDebug()<<"不需要更新";
}
}break;
case Update://开始更新
{
QByteArray _byte = m_currentFile.read(1024); //每次读取数据大小
m_socket->write(_byte);
/*m_currentFile.seek(m_currentFile.pos() + 1024);*/
if(m_currentFile.atEnd())
{ po+=1;