2011-01-12 7 views
3

Ich bin neu in Java und stoße in den oben genannten Fehler, während ich HTTPURLConnection verwende, um mehrere Postanforderungen auf Android zu senden. Ich habe eine HTTPTransport-Klasse geschrieben, in der ich sendMessage- und recvMessage-Methoden verwenden möchte.HTTPUrlConnection-Fehler (OutputStream kann nach dem Lesen aus einem inputStream nicht geöffnet werden)

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

Ich bin in der Lage, die erste Nachricht erfolgreich mit sendMessage und recvMessage zu senden. Wenn ich versuche, den zweiten zu senden, sehe ich diesen Fehler: IOException: java.net.ProtocolException: kann OutputStream nach dem Lesen von einem InputStream

nicht öffnen

Bitte lassen Sie mich wissen, wie ich diese Klasse schreiben kann.

Danke!

Antwort

0

Ihre Implementierung von HTTPUrlConnectiondoes not allow you to reuse the connection in this manner. Ich glaube, Sie müssen ein HttpConnectionManager verwenden, um Keep-Alive in der Art und Weise zu verwenden, wie Sie möchten.

+0

Es tut mir leid, aber da ich neu in Java bin, habe ich Ihre Antwort nicht verstanden. – smitten

+0

Hilft das? http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html – dkarp

+0

Danke, ich werde es durchgehen. – smitten

0

Sie müssen eine neue HttpURLConnection pro Anfrage verwenden. Die TCP-Verbindung selbst wird hinter den Kulissen zusammengefasst. Versuche nicht, das selbst zu tun.

Verwandte Themen