Использование потоков в объектах URL - PullRequest
0 голосов
/ 31 января 2012

Я использую сценарий клиент-сервер.Клиент связывается с сервером (который является сервлетом), используя URL-соединение.Вот код, который я использую.

 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();

Но я получаю исключение под названием:

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

Где я иду не так?

1 Ответ

0 голосов
/ 08 февраля 2012

Экземпляры 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();
...