Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InternetOpen, Не реагирует на наличие доступа к NET 
:(
    Опции темы
W_A_S_J_A
Дата 6.4.2008, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите будь-ласка. Очень нужно :(
В своей программе я вписал такой код (инициализация HTTP сессии):
Код


if(Form1->CheckBox1->Checked==true)
        {
                        hInternet=InternetOpen(                       
                       "Mozilla",
                        INTERNET_OPEN_TYPE_PROXY,     
                       "10.23.23.23:3128",       
                        NULL,
                        0);
                        if(hInternet!=NULL)
                                {
                                InternetSetOption(hInternet, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)LOGIN, lstrlen(LOGIN));
                                InternetSetOption(hInternet, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)PASSWORD, lstrlen(PASSWORD));
                                }
        else
                                {
                                Form1->Memo3->Lines->Append("A login and password is an error");
                                }
        }
else
                        {
                        hInternet=InternetOpen(
                        "Mozilla",
                        INTERNET_OPEN_TYPE_PRECONFIG,   
                        NULL,                           
                        NULL,
                        0);
                        }
if(hInternet==NULL)
                        {
                        Form1->Label8->Caption="Error HTTP session";
                        }



Смотрю что возвращает InternetOpen а там всегда :13369348, 13369360, 13369372, 13369384, 13369396......(код вызывается у меня в программе в цыкли) не зависимо есть ли подключение к интернету, или нет. Также не суть важно присоэдэняюсь через прокси или нет, всегда возвращается аналогичное.
Меня интересует должно ли оно так и  работать, если так то когда возникнет hInternet==NULL ? если программа даже с отсоэдэньонной сетью будет инициализировать HTTP сессию.

Это сообщение отредактировал(а) W_A_S_J_A - 6.4.2008, 15:05
PM MAIL   Вверх
korian
Дата 6.4.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Почему InternetOpen должен возвращать NULL?
А если комп является HTTP-сервером... и на этом же компе есть прога, которая является HTTP-клиентом и получает у этого сервера какие-то данные...
Сеть есть всегда, если в системе установлен протокол TCP/IP.
а вот функции типа InternetOpenUrl или InternetConnect вернут NULL, если нет возможности соединиться с сервером.
PM   Вверх
W_A_S_J_A
Дата 6.4.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Теперь понял. InternetOpen делает что-то типу заготовки только в TCP/IP и возвращает номер "заготовки"
Просто я думал, что если сеть отсоединена, то должно возвращаться NULL, а NULL возвращается в случае если в TCP/IP глюки.
Правильно я понял ?
PM MAIL   Вверх
korian
Дата 6.4.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(W_A_S_J_A @  6.4.2008,  16:04 Найти цитируемый пост)
сеть отсоединена

такого состояния достичь нельзя, сеть из одного компьютера - тоже сеть.

Цитата(W_A_S_J_A @  6.4.2008,  16:04 Найти цитируемый пост)
а NULL возвращается в случае если в TCP/IP глюки

я не знаю, когда он будет возвращать NULL.
MSDN по этому поводу ничего не пишет... пишет только то, что может возвращать NULL, чтобы узнать в чем проблема используйте GetLastError...
а проблемы могут быть самыми разными... например, нехватка памяти или еще каких ресурсов, или отсутствие какой-нить необходимой библиотеки или драйвера...
т.к. не описано какое значение может возвращать GetLastError при InternetOpen==NULL, надо расчитывать на то, что GetLastError может вернуть любое значение, кроме ERROR_SUCCES.

PM   Вверх
W_A_S_J_A
Дата 6.4.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Благодарность, понял.
Короче если веб браузер нормально работает на машине, то в большинстве случаев InternetOpen не повернет NULL.
Но для случая когда NULL всьоже повернется лучше сделать проверку, а заодно и вывести что возвращает GetLastError, чтобы знать в чем проблема.
PM MAIL   Вверх
korian
Дата 6.4.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ага, где-то так.
а чтобы юзеру было более понятно, почему произошла ошибка (по номеру ошибки даже программер сразу не скажет в чем проблема) можно использовать следующий код:

Код

DWORD dwError = GetLastError();
LPVOID lpMsgBuf;
if (FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL, dwError, 0, (LPTSTR) &lpMsgBuf, 0, NULL))
{
     MessageBox( NULL, (LPCTSTR)lpMsgBuf, _T("Error"), MB_OK | MB_ICONINFORMATION );
     LocalFree( lpMsgBuf );
}
else
     //выводим код ошибки



Это сообщение отредактировал(а) korian - 6.4.2008, 19:35
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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