首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-12-13 
QT文件传送问题求帮忙,求解决,就100分了,欢迎各位赏析经典代码不知道为什么,传送完第一个文件第二个文件

QT文件传送问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码
QT文件传送有关问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码
不知道为什么,传送完第一个文件第二个文件死活传送不过来了..求解;;用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;


    qDebug()<<"已发送"<<po<<"个文件";

m_currentFile.close();
m_state = None;
emit updateProecessChange(m_updateCount-m_files.size(),m_updateCount);
m_files.pop_back();
if(m_files.isEmpty())
{    
 qDebug()<<"所有文件发送完成";
m_timer->stop();

}
}                                                                                          
}break;
}
}

  这是发送端  .....能帮的帮下吧,蛋碎了一地..第一个文件成功的收到,后面文件过不来了;  貌似解决了 
[解决办法]
最近也在学Qt。
不过没有楼主超前。
不过,就我个人经验,考虑到国际化,那些需要翻译的字符串还是用tr包一下。QT文件传送有关问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码
[解决办法]


QT文件传送有关问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码
别这么谦虚,谢谢你的建议; ;;;我这是水货;;;;;哎,接触Qt才半个月,很菜;;别折煞了我~!我也是刚学Qt。QT文件传送有关问题;求帮忙,求解决,就100分了,欢迎各位赏析经典代码才看到Item View那一章。

热点排行