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();

書き込み機能は、最後の数キロバイトまで完全に機能します。ランダムな量のデータは送信されません (300 kb の約 295 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 に答える