私はJavaを使い慣れていないため、HTTPURLConnectionを使用してAndroidで複数の投稿リクエストを送信している間に上記エラーが発生しています。私はsendMessageとrecvMessageメソッドを持っているHTTPTransportクラスを書いています。HTTPUrlConnectionエラー(InputStreamから読み込んだ後でOutputStreamを開くことができません)
public class HTTPTransport
{
private HttpURLConnection connection;
public HTTPTransport()
{
URL url = new URL("http://test.com");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/octet-stream");
connection.setRequestProperty("Accept-Encoding", "gzip");
connection.setRequestProperty("Connection", "Keep-Alive");
}
public void sendMessage(byte[] msgBuffer, long size)
{
try
{
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
dos.write(msgBuffer, 0, (int)size);
dos.flush();
dos.close();
dos.close();
}
catch(IOException e)
{
// This exception gets triggered with the message mentioned in the title.
Log.e(TAG, "IOException: " + e.toString());
}
}
public byte[] recvMessage()
{
int readBufLen = 1024;
byte[] buffer = new byte[readBufLen];
int len = 0;
FileOutputStream fos = new FileOutputStream(new File("/sdcard/output.raw"));
DataInputStream dis = new DataInputStream(connection.getInputStream());
while((len = dis.read(buffer, 0, readBufLen)) > 0)
{
Log.d(TAG, "Len of recd bytes " + len + ", Byte 0 = " + buffer[0]);
//Save response to a file
fos.write(buffer, 0, len);
}
fos.close();
dis.close();
return RecdMessage;
}
}
最初のメッセージは、sendMessageとrecvMessageを使用して正常に送信できます。私は2番目を送信しようとすると、私はこのエラーが表示されます: IOException:java.net.ProtocolException:InputStreamから読み取った後にOutputStreamを開くことができません
このクラスの記述方法を教えてください。
ありがとうございます!
申し訳ありませんが、Javaにはとても新しいので、あなたの回答は理解できませんでした。 – smitten
これは役に立ちますか? http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html – dkarp
ありがとう、私はそれを通過します。 – smitten