首页| 论坛| 消息

标题:为什么大于10KB的文件就收不到
作者:weilong122
日期:2006-05-26 16:47
内容:

谁帮忙看一下,当我发送的文件小于10KB的时候,文件在接收端可以正常接受,当大于10KB的时候,就只能收到一部分(一般只有5KB)
发送端
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


#1 [weilong122 05-27 10:18]
我把接收端改成下面的样子,但是这回是重复得接收到开始的一端数据
知道的帮帮忙啊

void Sender::ReceiveFile()
{
int filesize = 0;
int readsize = 0;
QDataStream in(clientConnection);

in >> filesize;
in >> 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;
clientConnection->read(buf, blocksize);
file.write(buf, blocksize);
readsize += blocksize;
delete []buf;
if(readsize == filesize) break;
}

}
..
#2 [weilong122 05-30 00:03]
怎么好象全国人民都没几个熟悉Qt 的
#3 [xuxinshao 09-22 16:39]
熟悉Qt的全国人民就不多
#4 [style 09-23 13:33]
见楼下
#5 [style 09-23 14:28]
回头一想你程序不只这个问题...
还有一重要问题是
void Sender::ReceiveFile()
这是个局部函数,即每次接收数据完后就会关闭...
你下次接收数据时又会创建文件file,还好你是以追加,可是中间有几个别的变量就不能放在函数中.而要放到类数据成员中,防止函数结束,栈区释放.
比如filesize,你如果是选择只发送一次文件大小,就像我楼上帮你改的方法1一样,那样的话, 从第二次调用filesize都为0了..因为只赋了初值为0..
好好想想这问题吧...把有些变量放到类数据成员中去

回复 发表
主题 版块