Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > OutputStreamReader и InputStreamReader в цикле


Автор: lihusha 23.6.2009, 00:27
Думаю, в общих вопросах место этой теме...

Люди , подскажите , будьте добры, в чем ошибка.

Есть аплет и сервлет .

В аплете создается URLConnection, в OutputStreamWriter записывается запрос к сервлету. Пока сервлет должен просто взять строку , переданную в теле запроса , и вернуть ее аплету , дописав в ее начало "response  :  "


В общем код примерно такой
аплет

Код

...
private final String serverUrl = "http://localhost:8084/ChatServer/Server";
private URL server = new URL(serverUrl);
private URLConnection connection = server.openConnection();
...
if(!connection.getDoOutput())
connection.setDoOutput(true);
OutputStream out = connection.getOutputStream();
OutputStreamWriter  writer = new OutputStreamWriter(out);

writer.write("someString");
writer.flush();
writer.close();

InputStream in = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(isr);
String result = "";
String str = "";
while((str = reader.readLine()) != null)
{
    result += str;
}

in.close();
System.out.println("result  "+result);



сервлет

Код

.....
        ServletInputStream reader = request.getInputStream();
        int length = request.getContentLength();
        byte[]input = new byte[length];


        int c, count = 0;
        while
             ((c = reader.read(input, count, input.length - count)) != -1)
        {
            count += c;
        }
        reader.close();

        String inString = URLDecoder.decode(new String(input), "UTF-8");
        ServletOutputStream out = response.getOutputStream();
        OutputStreamWriter writer = new OutputStreamWriter(out);
        writer.write("response  :  "+inString);
        writer.flush();
        writer.close();
......



В общем , пытаюсь добиться , чтобы апплет и сервлет обменивались данными по HTTP : аплет отсылает сервлету данные , тот их обрабатывает и отсылает обратно результат , и так в замкнутом цикле.


Проблема вот в чем. Первый раз срабатывает все , вроде , нормально. Потом генерирует исключение 

Код

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


Подскажите , где корень данной проблемы
Спасибо

Автор: COVD 23.6.2009, 05:00
Цитата

и так в замкнутом цикле

В цикле надо кадый раз открывать новое соединение:  - openConnection - write - read - openConnection - write  ....
А вы, наверное, делаете openConnection - write - read -write - read ...

Автор: lihusha 23.6.2009, 12:27
Спасибо, получилось.

Автор: lihusha 23.6.2009, 23:59
Реально и правильно ли делать общение сервера и клиента таким , что в некоторых случаях сервер не дает ответ клиенту , он просто записывает данные ,например , в базу данных?

Т.е. openConnection - write

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)