更新:问题必须出在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。
以下是文件:
问题是1000太慢,尽管可以工作,但即使是小文件也要花费很多时间。你有什么建议?
一个可能的问题是服务器端的计时,即使它具有:
waitForBytesWritten();
我放
this->sleep(1);
但这没有帮助。
更新:问题必须出在Android方面,而不是Qt。