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

Вниз

как определить дисконнект?   Найти похожие ветки 

 
nockes   (2002-07-11 23:23) [0]

в общем такая проблема. на ночь иногда оставляю комп и закачиваю чё-нить с нета. но проблема чатые дисконнекты. и вот что бы комп просто так не грелся всю ночь, нужно определить когда происходит дисконнект и выключить его. как это можно осуществить?


 
Geser   (2002-07-11 23:58) [1]

А не проще ли в свойствах диалап соединения указать: пересоединять при обрыве связи?


 
nockes   (2002-07-12 00:02) [2]

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


 
Geser   (2002-07-12 00:09) [3]

С мирком не знаю, но с фтп Вы погорячились. При dial-up соединении , каким бы образом(программно или с помощью Виндовской утилитки) оно не было создано, IP адрес будет разный. Ну а по существу думаю что стоит с некоторой периодичностью пинговать два( для надёжности ) каких-нибудь IP адреса, допустим две поисковые системы. Шанс что они одновременно выйдут из строя ничтожно мал, так, что если от этих двух адресов нет ответа можно утверждать, что произошёл дисконнект.


 
nockes   (2002-07-12 00:16) [4]

там на фтп стоит ограничитель 212.* не пропускает, 195.* пропускает, а пров выдаёт по разному. а нельзяли это без пинга сделать? и если нет, то как сделать задержку минут в пять?


 
Geser   (2002-07-12 00:28) [5]

Включить таймер с 5-минутным интервалом. :-)


 
Geser   (2002-07-12 00:32) [6]

Включить таймер с 5-минутным интервалом. :-) Вот кусок из моей старой программы, писал не я.

type
ip_option_information = packed record // Информация заголовка IP (Наполнение
// этой структуры и формат полей описан в RFC791.
Ttl : byte; // Время жизни (используется traceroute-ом)
Tos : byte; // Тип обслуживания, обычно 0
Flags : byte; // Флаги заголовка IP, обычно 0
OptionsSize : byte; // Размер данных в заголовке, обычно 0, максимум 40
OptionsData : Pointer; // Указатель на данные
end;

icmp_echo_reply = packed record
Address : u_long; // Адрес отвечающего
Status : u_long; // IP_STATUS (см. ниже)
RTTime : u_long; // Время между эхо-запросом и эхо-ответом
// в миллисекундах
DataSize : u_short; // Размер возвращенных данных
Reserved : u_short; // Зарезервировано
Data : Pointer; // Указатель на возвращенные данные
Options : ip_option_information; // Информация из заголовка IP
end;

PIPINFO = ^ip_option_information;
PVOID = Pointer;

function IcmpCreateFile() : THandle; stdcall; external "ICMP.DLL" name "IcmpCreateFile";
function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external "ICMP.DLL" name "IcmpCloseHandle";
function IcmpSendEcho(
IcmpHandle : THandle; // handle, возвращенный IcmpCreateFile()
DestAddress : u_long; // Адрес получателя (в сетевом порядке)
RequestData : PVOID; // Указатель на посылаемые данные
RequestSize : Word; // Размер посылаемых данных
RequestOptns : PIPINFO; // Указатель на посылаемую структуру
// ip_option_information (может быть nil)
ReplyBuffer : PVOID; // Указатель на буфер, содержащий ответы.
ReplySize : DWORD; // Размер буфера ответов
Timeout : DWORD // Время ожидания ответа в миллисекундах
) : DWORD; stdcall; external "ICMP.DLL" name "IcmpSendEcho";

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
hIP : THandle;
pingBuffer : array [0..31] of Char;
pIpe : ^icmp_echo_reply;
pHostEn : PHostEnt;
wVersionRequested : WORD;
lwsaData : WSAData;
error : DWORD;
destAddress : In_Addr;
begin

// Создаем handle
hIP := IcmpCreateFile();

GetMem( pIpe,
sizeof(icmp_echo_reply) + sizeof(pingBuffer));
pIpe.Data := @pingBuffer;
pIpe.DataSize := sizeof(pingBuffer);

wVersionRequested := MakeWord(1,1);
error := WSAStartup(wVersionRequested,lwsaData);
if (error <> 0) then
begin
Memo1.SetTextBuf("Ошибка вызова "+
"WSAStartup().");
Memo1.Lines.Add("Код ошибки "+IntToStr(error));
Exit;
end;

pHostEn := gethostbyname(pchar(Edit1.text));
error := GetLastError();
if (error <> 0) then
begin
Memo1.SetTextBuf("Ошибка вызова "+
"gethostbyname().");
Memo1.Lines.Add("Error code: "+IntToStr(error));
Exit;
end;

destAddress := PInAddr(pHostEn^.h_addr_list^)^;

// Посылаем ping-пакет
Memo1.Lines.Add("Пингую " +
pHostEn^.h_name+" ["+
inet_ntoa(destAddress)+"] "+

IntToStr(sizeof(pingBuffer)) +
" байтами данных ");

IcmpSendEcho(hIP,
destAddress.S_addr,
@pingBuffer,
sizeof(pingBuffer),
Nil,
pIpe,
sizeof(icmp_echo_reply) + sizeof(pingBuffer),
5000);

error := GetLastError();
if (error <> 0) then
begin
Memo1.SetTextBuf("Ошибка вызова "+
"IcmpSendEcho()");
Memo1.Lines.Add("Код ошибки "+IntToStr(error));
Exit;
end;

// Смотрим некоторые из вернувшихся данных
Memo1.Lines.Add("Ответ от "+
IntToStr(LoByte(LoWord(pIpe^.Address)))+"."+
IntToStr(HiByte(LoWord(pIpe^.Address)))+"."+
IntToStr(LoByte(HiWord(pIpe^.Address)))+"."+
IntToStr(HiByte(HiWord(pIpe^.Address))));
Memo1.Lines.Add("Время ответа "+IntToStr(pIpe.RTTime)+" мс");

IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
Edit1.Text:="";

end;


 
Geser   (2002-07-12 00:43) [7]

http://delphibase.endimus.com/?action=viewfunc&topic=netconnect&id=10114


 
nockes   (2002-07-12 00:50) [8]

спосибо



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

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

Наверх





Память: 0.47 MB
Время: 0.006 c
14-81467
jin-jon1
2002-06-20 15:59
2002.07.25
Где найти в интернете программу Delphi.


14-81454
Alexandr
2002-06-21 12:02
2002.07.25
Ошибка в BORDBK50.DLL при отладке


1-81342
Src_Crab
2002-07-12 20:52
2002.07.25
Преобразование String в Integer.


1-81367
Secam
2002-07-12 20:06
2002.07.25
Как обработать такую структуру:Variant Array of Variant ?


3-81206
Кобра
2002-07-01 17:08
2002.07.25
Вопрос по Interbase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский