• 6842阅读
  • 7回复

QT4.1.2文件传输 [复制链接]

上一主题 下一主题
离线scerzz
 

只看楼主 倒序阅读 楼主  发表于: 2006-04-22
我用tcp传输文件
连接正常了的
tcp_client.write(image_data)
写入了一个打开读取为QByteArray类型 的imagge_data
然后读取方为

server_socket->readAll();
文件不能完整的读取啊

初学者,还请前辈指教啊
[ 此贴被XChinux在2006-04-22 21:00重新编辑 ]
离线scerzz

只看该作者 1楼 发表于: 2006-04-22
看了下其他socket的资料,解决了,
自己给自己发个回复,呵呵

socket对一次写入的数据是有限制的,具体不太清楚,
所以我对要传的东西进行了分块传送。并对文件大小和已经传送接受的大小进行了保存
  1. void ImageShow::ReceiveData()
  2. {
  3.   if(filesize==0)
  4.   {
  5.     server_socket->read((char *)&filesize,sizeof(int));
  6.     return;
  7.   }
  8.   if(filesnow<filesize)
  9.   {
  10.     filesnow += (int)server_socket->bytesAvailable();
  11.     image_data += server_socket->readAll();
  12.     if(filesnow==filesize)
  13.     {
  14.         emit ImageReady();
  15.     }
  16.     return;
  17.   }
  18.   QString size;
  19.   size.setNum(image_data.size());
  20.   QMessageBox::about(this,tr("错误"),size);
  21. }
  22. void ImageShow::SendData(qint64 towrite)
  23. {
  24.   if(writed==-1)//开始就初始化了,区别与0,所以为-1
  25.   {
  26.     filesize = image_data.size();
  27.     tcp_client.write((char *)&filesize,sizeof(int));
  28.     writed=0;
  29.     QString size;
  30.     size.setNum(filesize);
  31.     QMessageBox::about(this,tr("错误"),size);
  32.     return;
  33.   }
  34.   if(writed<filesize)
  35.   {
  36.     towrite = 65536;//每次写入如此大小
  37.     if((writed+65536)>filesize) towrite=filesize-writed;//超过文件大小取剩余部分
  38.     writed += (int)tcp_client.write((image_data.data()+writed),towrite);
  39.     if(writed>=filesize)
  40.     {
  41.           QString size;
  42.           size.setNum(writed);
  43.           QMessageBox::about(this,tr("错误"),size);
  44.     }
  45.   }
  46. }


顺便问下发布问题,怎么打包让其他机器也能运行呢?
[ 此贴被scerzz在2006-04-22 22:06重新编辑 ]
离线weilong122

只看该作者 2楼 发表于: 2006-04-23
请问楼主
能把你做的软件发给我吗

weilong122@tom.com
离线scerzz

只看该作者 3楼 发表于: 2006-04-23
自己学习怎么传文件的东西个,连个按钮都没有哦

如果找不到
network库
在工程文件
*.pro中添加
QT+=network
就行了
附件: net.rar (60 K) 下载次数:91
离线scerzz

只看该作者 4楼 发表于: 2006-04-23
对了,运行的时候
先运行
cli
再运行ser
选一个图片文件
离线weilong122

只看该作者 5楼 发表于: 2006-04-23
谢谢楼主啊

竟然要在工程里修改的

我一直都不知道,这几天被弄的郁闷死了

请问为什么要在工程里重新设置呢,为什么生成的pro文件会不完整?
离线scerzz

只看该作者 6楼 发表于: 2006-04-23
我觉得应该是qmake不能动态分析代码来获得使用了哪些库,感觉要实现的话是相当难的,VC使用非默认库不也要自己添加,好象QT默认只有gui 和c***什么东西哦
离线mark1728

只看该作者 7楼 发表于: 2006-06-01
楼主,我是一个新手,想学QT里面的socket编程,
但是无从下手,因为之前对socket没有了解

现在要做一个接收固定服务器的数据(字符和图片),但是没有头绪爱````呜呜呜呜
你可否发一些你做的例子给我学习一下呢?
我的邮箱是mark1728@163.com
万分感激阿!
快速回复
限100 字节
 
上一个 下一个