Erro HTTPUrlConnection (Não é possível abrir o OutputStream depois de ler de um inputStream)

Eu sou novo em Java e estou correndo para o erro mencionado acima ao usar HTTPURLConnection para enviar várias solicitações de post no Android. Eu escrevi uma class HTTPTransport na qual gostaria de ter methods sendMessage e recvMessage.

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; } } 

Eu sou capaz de enviar a primeira mensagem com sucesso usando sendMessage e recvMessage. Quando tento enviar o segundo, vejo esse erro: IOException: java.net.ProtocolException: não é possível abrir o OutputStream depois de ler de um inputStream

Por favor, deixe-me saber como posso escrever esta aula.

Obrigado!

Sua implementação de HTTPUrlConnection não permite que você reutilize a conexão dessa maneira . Eu acredito que você terá que usar um HttpConnectionManager para fazer uso do Keep-Alive da maneira que você quiser.

Você precisa usar um novo HttpURLConnection por solicitação. A conexão TCP em si será agrupada nos bastidores. Não tente fazer isso sozinho.