Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > WebServices проверка соединения


Автор: Rodman 2.8.2006, 18:19
Дароф. Подскажите как можно проверить соединение с сервером... я например вызываю функцию с сервера... но если нет соединения то вылетает ошибка.. а как мне выжать свое предупреждение???

Спасибо

Автор: drkot 2.8.2006, 19:11
как ты это делаеш? в примерах плз.

Автор: denks 2.8.2006, 21:46
Пропингуй сервер 
Код

unit pinger;

interface

uses windows, winsock;

function ping(host:string):integer;

implementation

type    
  ip_option_information = packed record
    Ttl: byte;
    Tos: byte;
    Flags: byte;
    OptionsSize: byte;
    OptionsData: Pointer;
  end;    

  icmp_echo_reply = packed record    
    Address: u_long;
    Status: u_long;
    RTTime: u_long;
    DataSize: u_short;
    Reserved: u_short;
    Data: Pointer;
    Options: ip_option_information;
  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; DestAddress: u_long; RequestData: PVOID;
                      RequestSize: Word; RequestOptns: PIPINFO;    ReplyBuffer: PVOID;
                      ReplySize: DWORD; Timeout: DWORD) : DWORD; stdcall; external 'ICMP.DLL' name 'IcmpSendEcho';

function ping(host:string):integer;
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
  result:=-1;
  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 exit;
  pHostEn := gethostbyname(PChar(host));
  error := GetLastError();
  if (error <> 0) then Exit;
  destAddress := PInAddr(pHostEn^.h_addr_list^)^;
  IcmpSendEcho(hIP,destAddress.S_addr,@pingBuffer,sizeof(pingBuffer),nil,pIpe,sizeof(icmp_echo_reply)+sizeof(pingBuffer),5000);
  error := GetLastError();    
  if (error <> 0) then Exit;
  result:=pIpe.RTTime;
  IcmpCloseHandle(hIP);    
  WSACleanup();    
  FreeMem(pIpe);    
end;

end.

Автор: Snowy 3.8.2006, 09:34
Поставь вызов в try .. except

Автор: Rodman 3.8.2006, 16:56
ОК... Спасибо... Оказывается все до гениальности просто - ПИНГ...


СПАСИБО

Автор: Rodman 31.10.2006, 13:45
Все таки мне необходимо с try .. except  сделать...
Snowy, можешь пример кинуть... 

Что то у меня не выходит самостоятельно...

Секнс...

Автор: Snowy 31.10.2006, 13:59
Примеры применения расписаны в справке дельфи.
Если интересует конкретное применение к какому-то коду, то нужен код smile

Автор: Rodman 31.10.2006, 14:36
Ну у меня есть функция IsConnect...

Сервер работает, то она возвращает строку 'Connect'... а если сервер я отключаю, то вылетает ошибка в делфях при запросе на эту функцию...

Я хотел пример типа
Код

try
  ShowMessage(ws.IsConnect());//ws переменная сервера, если сервер включен то все нормально, а что делать если нет...
except
    ...;// не пойму что написать ???



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


Автор: Snowy 31.10.2006, 15:21
Код

try
  if ws.IsConnect then
    ShowMessage('Есть контакт');
except
  ShowMessage('Не есть контакт');
end;
В дельфи выпрыгивать всё равно будет.
Просто нажми ещё раз F9 для продолжения.
Без дельфи будет работать нормально.

Автор: Rodman 31.10.2006, 15:46
Это наверно важно (ws - веб-сервис)...

Сделал как ты предложил - выдает

Unable to load WSDL File/Location 'http://..../WSDL/IIS'...

выдает и с делфями и без оных...

Автор: Snowy 31.10.2006, 16:08
В таком случае это не ошибка, а внутреннее сообщение.
Значит нужно по другому проверять.

Автор: Rodman 31.10.2006, 16:18
Как не подскажете??? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)