BufferedOutputStreamに問題があります。ソケット接続を介してAndroidデバイスからJavaサーバーにkmlファイルを送信したいと思います。(接続は正常です。プログラムの他の部分でPrintWriterとデータを交換することはすでに可能です)
kmlファイルを送信するために、バッファをいっぱいにします。しかし、flush()しても、何も起こりません。
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
inFile.close();
inFileは、kmlファイルを読み取るために使用されるストリームです。ソケットのOutputStreamを使用するBufferedOutputStreamです。
アウトオブジェクトを閉じませんが、閉じたくありません。一度だけ使用しません。そしてこれが問題です...close()メソッドはバッファのデータを送信しますが、ソケットも閉じます。flush()メソッドはバッファのデータを送信しません。
ソケットを閉じずにバッファをフラッシュしたい。
mySocket.shutdownOutput();も使用しようとしました。
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
mySocket.shutdownOutput();
inFile.close();
この方法では、ストリームを閉じてソケットを開いたままにします。これが私が望んでいることです。しかし、新しい出力ストリームを開こうとすると、例外java.net.SocketException:ソケット出力がシャットダウンされます
では、sokcetを閉じずにバッファをフラッシュする方法は、新しい出力ストリームを開くことができませんか?