2

因此,我正在编写一个应用程序,它获取图像,并使用套接字立即将其发送到远程计算机。

OutputStream mStream;

mStream = mySocket.getOutputStream();

/* filling header/bmbytes*/
mStream.write(header);
mStream.write(BitmapBytes);

mStream.flush(); //not working?

/*try { 
    wait(2000);
} catch (InterruptedException e) {

}*/
mStream.close();

写入函数可以完美运行,直到最后几 KB。不发送随机数量的数据(大约 295 kb 的 300 kb 是好的)。我读到它是因为它会阻塞直到它缓冲所有数据,但它似乎并不关心数据是否真的被发送,所以 mStream.close() 被调用得太快了。如果我取消注释等待部分,它工作得很好,但我可能需要每秒调用一次以上,而且它仍然不可靠(取决于连接),所以我需要另一种方法来正确调用 close()。冲洗似乎没有做任何事情。我用错了吗?任何想法表示赞赏。谢谢。

4

2 回答 2

0

此代码发送所有数据。问题出在接收端。

在收盘前,睡眠和冲洗都是毫无意义的。

于 2015-05-28T12:00:38.450 回答
-1

看这个例子http://stunningco.de/2010/04/25/uploading-files-to-http-server-using-post-android-sdk

尝试按部分而不是全部发送数据。喜欢:

while (bytesRead > 0)
{
    outputStream.write(buffer, 0, bufferSize);
    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
} 
于 2012-06-15T16:06:18.713 回答