Размер куска, отправляемого клиенту, влияет на полноту файла - PullRequest
0 голосов
/ 01 сентября 2018

Обновление: проблема должна быть на стороне Android, а не Qt.

Проблема в том, что я просто не могу отправить более 1000 байт (правильно) из Windows (через Qt) в Android. Здесь я размещаю полную информацию:

Код в 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, но многие байты пусты.

Проверьте эти фотографии из шестнадцатеричного визуализатора данных Workshop. Используя 1000 как chunkSize слева и 2000 справа.

Enter image description here Enter image description here

Вот файлы:

1000ChunkSize

2000ChunkSize

Проблема в 1000 слишком медленная и занимает много времени даже для небольших файлов, хотя и работает. Что вы предлагаете?

Возможной проблемой было время на стороне сервера, даже если оно имеет:

waitForBytesWritten();

ставлю

this->sleep(1);

Но это не помогло.

Обновление: проблема должна быть на стороне Android, а не Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...