Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сервер не отвечает повторно, если не создать сокет 
:(
    Опции темы
i_SweP
Дата 25.10.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



В общем, следующий код рабочий. Но почему он не будет работать, если не пересоздавать сокет: в таком случае в InputStream ничего не приходит (свойство eof == true). Получается, что сервер не отвечает на второй, третий и следующие запросы с одного сокета?  smile 

Код

    String s = String.format("POST http://%s/%s%s\nHost: %s\n\n", host, SITE_REQ, req, host );

    System.out.println( "Sending request: \n" + s + "----------" );

    socket = new Socket( host, 80 );    // вот без этой строки
    OutputStream os = socket.getOutputStream();
    os.write( s.getBytes() );
    InputStream is = socket.getInputStream();



Это сообщение отредактировал(а) i_SweP - 25.10.2010, 21:32
PM MAIL   Вверх
AntonSaburov
Дата 26.10.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 2
Всего: 118



Так может сервер имеет хидер закрываться после того, как отдаст все данные. Посмотри Keep-alive.
PM MAIL WWW ICQ   Вверх
i_SweP
Дата 26.10.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Я не знаю как посмотреть header. Мне нужно лишь стянуть страницу, поэтому ещё сильно не разбирался.
На мой запрос он выдаёт само содержимое страницы. А как параметр Connection в ответе посмотреть (да и другие тоже), скажите plz ?
PM MAIL   Вверх
Skipy
Дата 27.10.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(i_SweP @ 26.10.2010,  20:05)
На мой запрос он выдаёт само содержимое страницы. А как параметр Connection в ответе посмотреть (да и другие тоже), скажите plz ?

Кроме содержимого страницы у Вас должны быть еще и заголовки, ибо Вы вручную читаете ответ. Покажите всё, что приходит до пустой строки (после нее идет содержимое страницы).


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
COVD
Дата 27.10.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



PM MAIL   Вверх
i_SweP
Дата 27.10.2010, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Skipy
Я подумал, может сайт такой, но с твоего тоже самое, т.е. для 
POST http://www.skipy.ru/
Host: www.skipy.ru
С самой первой строки: <?xml version="1.0" encoding="UTF-8"?> и т.д....

COVD
Спасибо за ссылку, тоже думал, что-то такое должно быть
PM MAIL   Вверх
Skipy
Дата 28.10.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(i_SweP @ 27.10.2010,  19:36)
Skipy
Я подумал, может сайт такой, но с твоего тоже самое, т.е. для 
POST http://www.skipy.ru/
Host: www.skipy.ru
С самой первой строки: <?xml version="1.0" encoding="UTF-8"?> и т.д....

Скажите, в Вы так, случайно, не пробовали посылать запрос, соответствующий протоколу HTTP

http://www.ietf.org/rfc/rfc2616.txt

Section 5.1

Request-Line   = Method SP Request-URI SP HTTP-Version CRLF

Код
Socket s = new Socket("www.skipy.ru", 80);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(), "iso-8859-1"));
bw.write("GET / HTTP/1.1\r\n");
bw.write("Host: www.skipy.ru\r\n");
bw.write("\r\n");
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
while (true){
    String line = br.readLine();
    if (line == null){
        break;
    }
    System.out.println(line);
}
s.close();


И ответ: 

Код
HTTP/1.1 200 OK
Date: Thu, 28 Oct 2010 07:01:12 GMT
Server: Apache/2.0.63-lk.d (Unix) mod_ssl/2.0.63-lk.d OpenSSL/0.9.8g mod_dp20/0.99.2 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6(2007-09-24)
Last-Modified: Fri, 15 Oct 2010 12:30:35 GMT
ETag: "a0ec4d-3356-fe44f0c0"
Accept-Ranges: bytes
Content-Length: 13142
Connection: close
Content-Type: text/html; charset=utf-8

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html ...


Добавлено через 10 минут и 47 секунд
Цитата(i_SweP @ 25.10.2010,  21:31)
Получается, что сервер не отвечает на второй, третий и следующие запросы с одного сокета?

Задача сервера - обслуживать запросы. Много. А для этого надо максимально быстро освобождать ресурсы. Потому - сервер не может себе позволить такой роскоши как держать открытым сокет, в надежде, что Вы у него еще что-то спросите. Он это может делать только если его специально попросить указанием заголовка Connection: Keep-Alive. Причем именно "может", а не "обязан".

Это сообщение отредактировал(а) Skipy - 28.10.2010, 10:03


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
i_SweP
Дата 28.10.2010, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Цитата(Skipy @  28.10.2010,  10:02 Найти цитируемый пост)
Скажите, в Вы так, случайно, не пробовали посылать запрос, соответствующий протоколу HTTP? 

И случайно, и не очень пробовал. От чего и удивился, где заголовок в ответе. Но сейчас стало ясно, спасибо за маленький ликбез smile

Это сообщение отредактировал(а) i_SweP - 28.10.2010, 19:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.