RaF-by
|
 |
« : 24 Июнь 2010, 11:24:12 » |
|
Всем привет! У меня такая проблема на работе - часто обрывается интернет на модеме и каждый раз приходиться его перезагружать в ручную! Хочу сделать прогу что бы она сама каждые 10 мин проверяла соединение с интернетом, а точнее мне нужно что бы искала определенный файл на моем FTP сервере или на сайте (допустим картинку) и ели прога не будет находить этот файл, то прога будет давать модему команду перезагрузиться. По сети это выглядит так: procedure TForm1.Button1Click(Sender: TObject); begin if not FileExists('c:\4024.jpg') then WinExec('C:\Modem\Modem.exe',1); end; а вот по интернету не хочет: procedure TForm1.Button1Click(Sender: TObject); begin if not FileExists(' http://www.quarta.ru/img/products/small/BizTalk/bt_1.jpg') then WinExec('C:\Modem\Modem.exe',1); end; Помогите плиззз!
|
|
|
Записан
|
|
|
|
Ave
Гродненец
 Репутация: +10/-0
Offline
Пол: 
Сообщений: 81
я - не море. меня не волнует..
|
ничем не помогу насчет delphi но хочу высказать свое скромное мнение, что это весьма сомнительный способ проверить есть ли соеденение с инетом а что если ftp-сервер не доступен или файла из урла уже нет? скорее всего delphi все же предоставляет инструменты для более вразумительного решения проблемы... в гугле че-нить искал?
|
|
|
Записан
|
Жизнь - игра. Задумка хреновая, но графика за#бись. Типичной ошибкой программиста на С++ является выбор С++ в качестве языка программирования
|
|
|
RILLey_ELf
Гость
|
автор 1-2курсник и явно в гугле не искал
не уверен конечно, но почему то мне кажется, что FileExists работает только с локальными файлами (ну в самом крайнем случае с файлами SMB). а вот как раз другие протоколы должны поддерживаться другими способами.
я бы на вашем месте делал следующим образом: 1) скачал файл сторонней прогой (wget); 2) проверил его существование.
а на своём месте отправил бы http запросик и проверил 404
|
|
|
Записан
|
|
|
|
|
|
RaF-by
|
Всем спасибо!!! Мне подсказали решение как и что прописать! 
|
|
|
Записан
|
|
|
|
iddqd
|
я бы тупо пинговал что нибудь, например 8.8.8.8
|
|
|
Записан
|
|
|
|
Demik
Ты бЛондинКо - йА админ, Тибя много - йА адзын . Ты на кАпсЕ - я пАцтуЛом, щОлкну мышкой +1 :)
Кандидат в депутаты
   Репутация: +703/-18
Offline
Пол: 
Сообщений: 3492
В России 2 беды,причем 1я постоянно ремонтирует 2ю
|
еще как вариант можешь взять проверку отсюда: uses WinInet, ComCtrls;
function FtpDownloadFile(strHost, strUser, strPwd: string; Port: Integer; ftpDir, ftpFile, TargetFile: string; ProgressBar: TProgressBar): Boolean;
function FmtFileSize(Size: Integer): string; begin if Size >= $F4240 then Result := Format('%.2f', [Size / $F4240]) + ' Mb' else if Size < 1000 then Result := IntToStr(Size) + ' bytes' else Result := Format('%.2f', [Size / 1000]) + ' Kb'; end;
const READ_BUFFERSIZE = 4096; // or 256, 512, ... var hNet, hFTP, hFile: HINTERNET; buffer: array[0..READ_BUFFERSIZE - 1] of Char; bufsize, dwBytesRead, fileSize: DWORD; sRec: TWin32FindData; strStatus: string; LocalFile: file; bSuccess: Boolean; begin Result := False;
{ Open an internet session } hNet := InternetOpen('Program_Name', // Agent INTERNET_OPEN_TYPE_PRECONFIG, // AccessType nil, // ProxyName nil, // ProxyBypass 0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE
{ Agent contains the name of the application or entity calling the Internet functions }
{ See if connection handle is valid } if hNet = nil then begin ShowMessage('Unable to get access to WinInet.Dll'); Exit; end;
{ Connect to the FTP Server } hFTP := InternetConnect(hNet, // Handle from InternetOpen PChar(strHost), // FTP server port, // (INTERNET_DEFAULT_FTP_PORT), PChar(StrUser), // username PChar(strPwd), // password INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher? 0, // flag: 0 or INTERNET_FLAG_PASSIVE 0);// User defined number for callback
if hFTP = nil then begin InternetCloseHandle(hNet); ShowMessage(Format('Host "%s" is not available',[strHost])); Exit; end;
{ Change directory } bSuccess := FtpSetCurrentDirectory(hFTP, PChar(ftpDir));
if not bSuccess then begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); ShowMessage(Format('Cannot set directory to %s.',[ftpDir])); Exit; end;
{ Read size of file } if FtpFindFirstFile(hFTP, PChar(ftpFile), sRec, 0, 0) <> nil then begin fileSize := sRec.nFileSizeLow; // fileLastWritetime := sRec.lastWriteTime end else begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); ShowMessage(Format('Cannot find file ',[ftpFile])); Exit; end;
{ Open the file } hFile := FtpOpenFile(hFTP, // Handle to the ftp session PChar(ftpFile), // filename GENERIC_READ, // dwAccess FTP_TRANSFER_TYPE_BINARY, // dwFlags 0); // This is the context used for callbacks.
if hFile = nil then begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Exit; end;
{ Create a new local file } AssignFile(LocalFile, TargetFile); {$i-} Rewrite(LocalFile, 1); {$i+}
if IOResult <> 0 then begin InternetCloseHandle(hFile); InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Exit; end;
dwBytesRead := 0; bufsize := READ_BUFFERSIZE;
while (bufsize > 0) do begin Application.ProcessMessages;
if not InternetReadFile(hFile, @buffer, // address of a buffer that receives the data READ_BUFFERSIZE, // number of bytes to read from the file bufsize) then Break; // receives the actual number of bytes read
if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE) then BlockWrite(LocalFile, buffer, bufsize); dwBytesRead := dwBytesRead + bufsize;
{ Show Progress } ProgressBar.Position := Round(dwBytesRead * 100 / fileSize); Form1.Label1.Caption := Format('%s of %s / %d %%',[FmtFileSize(dwBytesRead),FmtFileSize(fileSize) ,ProgressBar.Position]); end;
CloseFile(LocalFile);
InternetCloseHandle(hFile); InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Result := True; end;
|
|
|
Записан
|
|
|
|
Sergey Loysha
|
а не проще что-нибудь пинговать? любой сервер, типа ya.ru 
|
|
|
Записан
|
|
|
|
VooDoo
|
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
|