2012-01-31 2 views
0

클라이언트 - 서버 시나리오를 사용하고 있습니다. 클라이언트는 url 연결을 사용하여 서버 (서블릿)와 통신합니다. 여기에 내가 사용하고있는 코드가있다. 내가 잘못 가고URL 객체의 스트림 사용

java.net.ProtocolException:Cannot write output after reading input. 

:

URL url = new URL("http://localhost:8080/hello"); 
    URLConnection connection = url.openConnection(); 
    connection.setDoOutput(true); 
    ObjectOutputStream out=new ObjectOutputStream(connection.getOutputStream());//1st out put stream 
    out.writeObject(pk); 
    out.flush(); 
    out.close(); 

    ObjectInputStream in = new ObjectInputStream(connection.getInputStream());//1st instream 
    PublicKey spk=(PublicKey)in.readObject(); 
    in.close(); 

    ObjectOutputStream out1=new ObjectOutputStream(connection.getOutputStream());//2nd out put stream 
    out1.writeObject(str1); 
    out1.flush(); 
    out1.close(); 

    ObjectInputStream in1 = new ObjectInputStream(connection.getInputStream());  
    String rstr3=(String)in1.readObject(); 
    //processing 
    in1.close(); 

하지만 난라고 예외는 무엇입니까?

답변

0

URLConnection의 인스턴스는 재사용 할 수 없습니다. 리소스에 연결할 때마다 다른 인스턴스를 사용해야합니다. 다음 코드가 제대로 작동합니다 (새 urlconnection 객체 열기).

URLConnection connection1 = url.openConnection(); 
ObjectOutputStream out1=new ObjectOutputStream(connection1.getOutputStream());//2nd out put stream 
    out1.writeObject(str1); 
    out1.flush(); 
    out1.close(); 

    ObjectInputStream in1 = new ObjectInputStream(connection1.getInputStream());  
    String rstr3=(String)in1.readObject(); 
    //processing 
    in1.close(); 
+0

더 깨끗하고 실용적인 대안은 무엇입니까? 매번이 작업을 수행하는 것보다 더 짧은 간단한 작업이 있습니까? – Trup

+0

@Trup : 시도하지는 않았지만 conection.disconnect()를 호출 한 후 연결 객체를 다시 사용할 수 있다고 생각합니다. 가능한 경우 시도해주세요. – Ashwin