当前位置:  技术问答>linux和unix

学过Qt的前辈帮个忙

    来源: 互联网  发布时间:2015-11-29

    本文导语:  我在用Qt做文件传输的时候发生了一个情况 当我发送一个文本文件的时候,在接收方接到的是文本文件的一部分,这一部分重复接收 求高手给点建议 ============================================================================ 发送端 ...

我在用Qt做文件传输的时候发生了一个情况
当我发送一个文本文件的时候,在接收方接到的是文本文件的一部分,这一部分重复接收
求高手给点建议
============================================================================
发送端

void Sender::ConnectTo()  //与接收端取得连接
{
    tcpSocket = new QTcpSocket(this);
    
    tcpSocket->connectToHost(Ipedit->text(),5002);
    
    connect(tcpSocket, SIGNAL(connected ()), this, SLOT(SendFile()));
    
}


void Sender::SendFile()//向接收端发送文件
{       
     int bytesWrite = 0;
                                                           
    fileName = QFileDialog::getOpenFileName(this,tr("Open File"), QDir::currentPath());
    
    QFile Sendfile(fileName);
    Sendfile.open(QIODevice::ReadOnly);

QDataStream stream( tcpSocket );

QFileInfo f(fileName);
fileName = f.fileName();
int filesize =f.size();

stream > fileName;
        
    QFile file(fileName); 
   
    if (!file.open(QFile::WriteOnly | QFile::Append)) 
    {
        QMessageBox::warning(this,"error","can not open the file!");
        return;    
    }
                                                         
              
    while (1) 
    {
       if( clientConnection->isReadable())
       {
          if(readsize + 2048 read(buf, 2048);
              file.write(buf, 2048);   
              readsize += 2048;
              delete []buf;
              if(readsize == filesize) break;
          }
          else
          {
              int blocksize = filesize - readsize;
              buf = new char[blocksize];  
              clientConnection->read(buf, blocksize);
              file.write(buf, blocksize);   
              readsize += blocksize;
              delete []buf;   
              if(readsize == filesize) break;
          }
       
       }
             
    }
       file.close();
       clientConnection->disconnect();
                            
}


|
建议一个比较WC的方法,声明两个成员:
    bool  m_firstReceive;
slot:
    void readyReceive();

下面是对这个成员函数的定义:
void Sender::readyReceive()

      if(!m_firstReceive)
       {
           m_firstReceive = True;
           ReceiveFile();
        }
}      
注意,m_firstReceive的赋值,初始为False,然后更改你上面的connect:
connect(clientConnection, SIGNAL(readyRead()),this,SLOT(readyReceive()));

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个菜鸟的请求: 哪位前辈能给晚辈讲讲“匿名类”
  • 求教各位前辈,linux下怎么安装调解啊?
  • 前辈,再帮忙看看吧!我真的很急用,后天....
  • 想学qt,大哥大姐前辈们介绍几本书吧,最好能提供电子版,谢谢~~~~~~~~~~~
  • 各位前辈大哥,大家好。可否帮忙?
  • 请问前辈,线程和进程有什么区别啊?
  • 请前辈介绍一本jsp+数据库的经典好书!!!
  • 寻找陕西西安中润科技的技术前辈
  • 麻烦诸位前辈推荐推荐一款适合底层开发的Linux版本!
  • 征求各位前辈的经验
  • 求项目经验,请前辈指教
  • 各位前辈,求教关于bc计算的问题
  • 要学习下libnids源码,前辈提点建议
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!!
  • 新手提问,请前辈们指教(关于cygwin)!
  • 求助! 各位前辈给点建议撒
  • 请问前辈们设计source整理工具,使用lex+yacc好还是perl?
  • 想快速了解一下Linux基础知识。请前辈们指点迷津!
  • 从windows开发转Linux开发 的前辈请进!!!
  • 请问各位前辈weblogic的driver有没有破解版,在哪里下在?谢谢。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3