首页 > 解决方案 > 发送给客户端的块大小会影响文件的完整性

问题描述

更新:问题一定出在 Android 端,而不是 Qt。

问题只是我无法从 Windows(通过 Qt)向 Android 发送超过 1000 个字节(正确)。在这里我发布完整的信息:

Qt Creator 中的代码(Windows 端):

QFile inputFile(fileInfo->absoluteFilePath());
QByteArray read;
inputFile.open(QIODevice::ReadOnly);
int size = 0;
while(1){
    read.clear();
    read = inputFile.read(1000);
    qDebug()<< "Read : " <<read.size();
    size += read.size();
    if(read.size() == 0){
        break;
    }
    QByteArray toWrite(read);
    newSocket->write(toWrite);
    newSocket->flush();
    newSocket->waitForBytesWritten();
    this->sleep(1);
}
inputFile.close();
qDebug()<<"Transfer Done! " << size << " bytes";}

Java代码(Android端):

DataOutputStream dos;
DataInputStream dis;
Socket s;
s = new Socket("192.168.137.1",8080);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
while(true){
    if(dis.available() > 0 ) {
    int chunkSize = 1000;
    byte[] b = new byte[chunkSize];
    dis.read(b);
    writeToExternalStoragePublic("test.png",b);}

代码工作得很好。当我将两边的块大小设置为 1,000,000 并且数据写入 Android 时,它甚至可以工作,但是很多字节是空的。

从 hex Workshop 数据可视化工具查看这些照片。左侧使用 1000 作为 chunkSize,右侧使用 2000。

在此处输入图像描述 在此处输入图像描述

以下是文件:

1000ChunkSize

2000ChunkSize

问题是 1000 太慢了,即使是小文件也需要很多时间,尽管它可以工作。你有什么建议?

一个可能的问题是服务器端的时间,即使它有:

waitForBytesWritten();

我放

this->sleep(1);

但这没有帮助。

更新:问题一定出在 Android 端,而不是 Qt。

标签: androidc++qtnetworkingtcp

解决方案


推荐阅读