Главная страница
    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
8-81382
McSimm
2001-12-27 15:19
2002.07.25
3DS MAX как OLE-сервер


3-81143
lejik
2002-07-01 13:08
2002.07.25
Как востановить таблицу


4-81512
z_1
2002-05-20 15:52
2002.07.25
Хендл активного окна


7-81508
cdaDmitriy
2002-05-01 14:45
2002.07.25
КАК можно определить Изменение Системного времени


1-81334
Начинающий програмер
2002-07-12 18:18
2002.07.25
INI или что-нибудь подобное





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