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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UnknownHostException при попытке открытия сокета 
V
    Опции темы
icewind
Дата 26.7.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

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



Всем доброго времени суток.
Не могу разобраться с одним вопросом. При попытке открытия сокета на некоторые урлы вываливается UnknownHostException. 
Код

Socket sock = new Socket( "http://www.google.com", 80 ); //K примеру

Вывалит ошибку, а 
Код

Socket sock = new Socket( "http://forum.vingrad.ru", 80 );

отработает номально. ( Урлы чисто символические ). Пытался установить причину глюка, не вышло. 

Для эксперимента написал на питоне. Все работает, из сокета читает. На с++ тоже проблем нет.
Возможно тогда что-то не так с java машиной?  smile 

Буду признателен за любую помощь.


--------------------
user posted image
PM MAIL Skype   Вверх
COVD
Дата 26.7.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



При получении UnknownHostException надо повторять попытку соединения, потому что причиной могут быть сбои в интернете. В этом случае повторные попытки бывают успешными.

Это сообщение отредактировал(а) COVD - 26.7.2009, 18:39
PM MAIL   Вверх
icewind
Дата 26.7.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

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



Спасибо за совет, но не думаю что в моем случае причина не в этом. Пробовал до 100 попыток в случае получения этого эксепшина. Результат тот же  smile 


--------------------
user posted image
PM MAIL Skype   Вверх
Vasay
Дата 26.7.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



icewind, 

Хм, насколько я помню - "http://" не нужно.


И Вы случаем не пытаетесь открыть сокет с адресом www.site.com/path ?

Можете выложить полный код где Вы работаете с сокетом?

Добавлено через 10 минут и 52 секунды
Вообще для получения страницы через сокет надо выполнить много действий:

Примерно так:

Код


            url = new URL(urlSrc);  //urlSrc - адрес страницы которую хотим получить
            String host = url.getHost(); // Выделяем хост
            int port = url.getPort(); // выделяем порт
            if (port == -1) {
                port = 80; //если порт не указан -по умолчанию 80
            }
            String GET = url.getQuery(); //выделяем строку запроса (то что после ?)
            String path = url.getPath(); //выделяем путь
            int post_length = post.length(); //считаем длину информации отправляемой методом POST 
            String header;

            if (GET != null) {
                GET = "?" + GET;
            } else {
                GET = "";
            }

            if (post.equals("")) { //если мы ничего нехотим отправлять с помощью POST, то мы посылаем запрос GET
                header = "GET" + " " + path +  GET + " HTTP/1.0\r\nAccept: */*\r\nHost: " + host + "\r\nCookie: " + Cookie + "\r\nUser-Agent: " + userAgent + "\r\nContent-Type: text/html\r\n\r\n";
            } else {// иначе посылаем запрос POST
                header = "POST" + " " + path + GET + " HTTP/1.0\r\nAccept: */*\r\nHost: " + host + "\r\nCookie: " + Cookie + "\r\nUser-Agent: " + userAgent + "\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: " + post_length + "\r\n\r\n" + post;
            }

            s = new Socket(host, port); 

            s.getOutputStream().write(header.getBytes()); //отсылаем заголовок
            is = s.getInputStream();
            int Read = 0;
            String line;


            br = new BufferedReader(
                    new InputStreamReader(is));



            while ((line = br.readLine()) != null) {
                Out = Out + line + "\n";  //а вот теперь получаем ответ.
            }



На самом деле работа с сайтами через сокет оправдана крайне редко, в большинстве случаев достаточно HttpURLConnection


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
icewind
Дата 27.7.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

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



Цитата(Vasay @  26.7.2009,  20:27 Найти цитируемый пост)
Хм, насколько я помню - "http://" не нужно.

Тогда вываливается exception с сообщением no protocol

Цитата(Vasay @  26.7.2009,  20:27 Найти цитируемый пост)
И Вы случаем не пытаетесь открыть сокет с адресом www.site.com/path

Нет, конечно.  smile 

Делаю вот так
Код

Socket sock = null;
        BufferedReader input = null;
        try
        {
            sock = new Socket( this.UrlObject.getHost(), ( -1 != this.UrlObject.getPort() ) ? this.UrlObject.getPort() : 80 );
            sock.getOutputStream().write( this.Headers.getBytes() );

            input = new BufferedReader( new InputStreamReader(sock.getInputStream()) );
            int ch;
            while( (ch = input.read()) != -1 )
            {
                responce += (char)ch;
            }

        }
        catch( UnknownHostException e )
        {
            ...



Спасибо за ответ, я пока писал нашел причину сего глюка  smile В опциях проекта не та версия jdk выставлена была... Исправил и все заработало. 


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

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

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


 




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


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

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