Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Вниз

Проверка соединения с интернетом - как гарантированно?   Найти похожие ветки 

 
lipskiy   (2003-09-04 23:37) [0]

Использую в свой программе нижеприведенный код для проверки наличия коннекта. Все хорошо, но иногда приходят письма от юзеров, что у них моя программа не качает. Даю им тест - без проверки коннекта все работает, сама проверка коннекта дает результат, что нет коннекта.

Один описал свое подключение к инету так:
У меня выделенная линия 2 Мб, используется прозрачное проксирования для 80-го порта через Squid остальные незапрещенные порты работают через NAT.

Другой так:
Про сеть почти ничего к сожалению не знаю: Домашняя сеть организована каким то некомерческим партнерством домашних сетей, связь с провайдером вроде через ADSL прокси сервера нет.

Чего в коде проверки коннекта недостаточно, чтобы покрыть все 100% вариантов подключения к инету? Или может есть какой другой способ, гарантирующий правильную проверку?

Вот собственно код (писаный не мной, я в нем мало что понимаю):

function CheckInetConnect:byte;
const
cERROR_BUFFER_TOO_SMALL = 603;
cRAS_MaxEntryName = 256;
cRAS_MaxDeviceName = 128;
cRAS_MaxDeviceType = 16;
type
HRASConn = DWord;
PRASConn = ^TRASConn;
TRASConn = record
dwSize: DWORD;
rasConn: HRASConn;
szEntryName: array [0..cRAS_MaxEntryName] of Char;
szDeviceType: array [0..cRAS_MaxDeviceType] of Char;
szDeviceName: array [0..cRAS_MaxDeviceName] of char;
end;
TRasEnumConnections =
function (RASConn: PrasConn; { buffer to receive Connections data }
var BufSize: DWord; { size in bytes of buffer }
var Connections: DWord { number of Connections written to buffer }
): LongInt; stdcall;

//---------------------------------

function RasConnectionCount : Integer;
var
RasDLL: HInst;
Conns: array [1..4] of TRasConn;
RasEnums: TRasEnumConnections;
BufSize: DWord;
NumConns: DWord;
RasResult: Longint;
begin
Result:= 0;
// Загрузка библиотеки
RasDLL:= LoadLibrary("rasapi32.dll");
if RasDLL = 0 then exit;
try
RasEnums:= GetProcAddress(RasDLL,"RasEnumConnectionsA");
if @RasEnums = nil then
raise ERasError.Create("Ошибка вызова функции RasEnumConnectionsA из rasapi32.dll");
Conns[1].dwSize:= Sizeof (Conns[1]);
BufSize:= SizeOf(Conns);
RasResult:= RasEnums(@Conns, BufSize, NumConns);
If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result:= NumConns;
finally
FreeLibrary(RasDLL);
end;

end;

//---------------------------------

var
Reg : TRegistry;
bUseProxy : Boolean;
UseProxy : LongWord;

begin
Result:= 0;
Reg:= TRegistry.Create;
with REG do
try
try
RootKey:= HKEY_CURRENT_USER;
if OpenKey("\Software\Microsoft\Windows\CurrentVersion\Internet settings",False) then
begin
// Пробуем прочитать и ловим ошибку
if GetDataType("ProxyEnable") = rdBinary then
ReadBinaryData("ProxyEnable", UseProxy, SizeOf(LongWord)) else
begin
bUseProxy:= ReadBool("ProxyEnable");
if bUseProxy then UseProxy:= 1 else UseProxy:= 0;
end;
if (UseProxy <> 0) and (ReadString("ProxyServer") <> "" ) then Result:= 2;
end;
except
//Вероятно, нет связи через прокси
end;
finally
Free;
end;
// Мы можем проверять(отмечать) RasConnectionCount, даже если работа с сетями
// телефонного вызова не установлена просто, потому что это возвратится 0,
// если DLL не найден.
if Result = 0 then
begin
if RasConnectionCount > 0 then Result:= 1;
end;

end;


 
DeMoN-777   (2003-09-05 00:19) [1]

Если я правильно понял вопрос, то лучшей проверки, кроме пинга нет + дать возможностьь юзверю настроить проксю. Остальные способы сомнительны и в них есть свои "подводные камни". Вопрос поднимался сотни раз, но конкретного ответа я лично так и не наблюдал... самому интерестно. Как ? Сошлись на пинге.


 
Вася Пупкин   (2003-09-05 00:59) [2]

> DeMoN-777 © (05.09.03 00:19) [1]
Не сказал бы... у меня на работе пинг наружу не проходит... админы позаботились


 
nikkie   (2003-09-05 01:11) [3]

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


 
Verg   (2003-09-05 08:12) [4]

Че-то я не понял. Ты что называешь подключением к Инет-у?
Наличие в регистри каких-то там настроек прокси?

А что, без прокси уже в инет не ходят?
Бред какой-то...

А RAS соединения могут быть установлены и вовсе не к провайдеру глобальной сети.

Соединение с Интернет - это некорректный термин. Единственное о чем можно говорить - это "возможен ли диалог с нужным хостом-участником глобальной сети".


 
lipskiy   (2003-09-05 08:23) [5]

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

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


 
Verg   (2003-09-05 08:38) [6]

Приведенный код дает ответ 0 в случае отсутствия соединения, 1 в случае соединения через прокси, и 2 в случае модемного соединенния, я так его понял.

Нет, этот код даст 2, если ИЕ сконфигурирован на работу через прокси.
Он даст 1, если прокси не сконфигурирован, но есть хоть одно RAS соединение (любое, хоть с кем).

И он даст 0 в случае, когда нет ни одного RAS соединения, да и ИЕ сконфигурирован на работу без прокси.


> Ну ясно, вполне убедили что лучше пинговать


Не, не то. Если комп сидит в теневой сети и может выходить ТОЛЬКО через прокси никакой пинг ему не поможет. В лучшем случае с помощью PING он может проверить <жив ли>/<не заблокирован ли ICMP на> компътер, на котором должен работать прокси.


 
Verg   (2003-09-05 08:49) [7]

Чуть ниже по экрану :)

http://delphimaster.net/view/6-1062705478/



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.011 c
3-98445
Борис
2003-10-10 14:15
2003.10.30
Помогите сделать запрос. Help


1-98601
Talla2k
2003-10-19 16:21
2003.10.30
импорт экспорт


14-98826
Aristarh
2003-10-11 00:29
2003.10.30
Как зайти в bios ноутбука IBM?


14-98810
Иван Шихалев
2003-10-12 00:11
2003.10.30
Hекоторые факты из жизни древних славян


4-98922
SH
2003-08-26 17:32
2003.10.30
Как определить, что окно свёрнуто?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский