在2000下,响应是很快的只有几秒钟,但是在98系统下如果服务器不通(能ping服务不启动无所谓的)或者本机脱网的情况下,有很长时间的响应,怎么减少这个时间啊,2000下就没事啊。

解决方案 »

  1.   

    先PING 一下网络是否是通的,如果通的话就连接,不通提示错误。
    uses
    shellapi;
    type
      PIPOptionInformation = ^TIPOptionInformation;
      TIPOptionInformation = packed record
        TTL: Byte;
        TOS: Byte;
        Flags: Byte;
        OptionsSize: Byte;
        OptionsData: PChar;
      end;
      type PIcmpEchoReply = ^TIcmpEchoReply;
      TIcmpEchoReply = packed record
        Address: DWord;
        Status: DWord;
        RTT: DWord;
        DataSize:Word;
        Reserved: Word;
        Data: Pointer;
        Options: TIPOptionInformation;
      end;
      TIcmpCreateFile = function: THandle; stdcall;
      TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
      TIcmpSendEcho = function(IcmpHandle:THandle;
                               DestinationAddress:DWord;
                               RequestData: Pointer;
                               RequestSize: DWord;
                               RequestOptions: PIPOptionInformation;
                               ReplyBuffer: Pointer;
                               ReplySize: DWord;
                               Timeout: DWord): DWord; stdcall;implementationvar
      IPOpt:TIPOptionInformation;
      FIPAddress:DWORD;
      pReqData,pRevData:PChar;
      pIPE:PIcmpEchoReply;
      FSize: DWORD;
      MyString:string;
      FTimeOut:DWORD;
      BufferSize:DWORD;
    begin
    hICMPdll := LoadLibrary('icmp.dll');
    @ICMPCreateFile:= GetProcAddress(hICMPdll, 'IcmpCreateFile');
    @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
    @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
    hICMP := IcmpCreateFile;
    FIPAddress:=inet_addr(PChar('127.0.0.1'));//这是你所连接服务器的IP地址,
    FSize:=80;
    BufferSize:=SizeOf(TICMPEchoReply)+FSize;
    GetMem(pRevData,FSize);
    GetMem(pIPE,BufferSize);
    FillChar(pIPE^, SizeOf(pIPE^), 0);
    pIPE^.Data := pRevData;
    MyString := 'Argen Ping32 Sending Message.';
    pReqData := PChar(MyString);
    FillChar(IPOpt, Sizeof(IPOpt), 0);
    IPOpt.TTL:= 64;
    FTimeOut :=500;
    IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE,
            BufferSize, FTimeOut);
    try
    try
    if pReqData^ = pIPE^.Options.OptionsData^ then
    begin
    Messagebox(self.handle,'目标可到','Ping32',64);//可以在这加上你的连接服务的代码.
    end;
    except
    Messagebox(self.handle,'目标不可到','Ping32',64);
    end;
    finally
    FreeMem(pRevData);
    FreeMem(pIPE);
    end;
    end;end.
      

  2.   

    谢谢楼上的,不过一般服务器是有防火墙的,是ping不通的,但是数据库服务是可用的。