如何解决在98系统下delphi做得程序访问oracle数据库时,若ping不通服务器的情况下的响应问题? 在2000下,响应是很快的只有几秒钟,但是在98系统下如果服务器不通(能ping服务不启动无所谓的)或者本机脱网的情况下,有很长时间的响应,怎么减少这个时间啊,2000下就没事啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先PING 一下网络是否是通的,如果通的话就连接,不通提示错误。usesshellapi;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;beginhICMPdll := 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);trytryif pReqData^ = pIPE^.Options.OptionsData^ thenbeginMessagebox(self.handle,'目标可到','Ping32',64);//可以在这加上你的连接服务的代码.end;exceptMessagebox(self.handle,'目标不可到','Ping32',64);end;finallyFreeMem(pRevData);FreeMem(pIPE);end;end;end. 谢谢楼上的,不过一般服务器是有防火墙的,是ping不通的,但是数据库服务是可用的。 cxTreeList中onGetDisplayText事件的疑问,太奇怪了,求高手解疑!在线等啊。分不够可再加! 好久没散分了...来散一个.. MYSQL的Blob字段的内容过长时无法完全保存成文件 如何去掉字符串中的 英文 和 标点符号(包括全角的标点符号) ?? 考试题:这个SQL语句怎么写? 窗体无法关闭的问题?? 关于异或运算 制作HELP文件 问一个FOX的问题!! delphi+sqlserver delphi如何写代码实现重建索引?最好有代码?谢谢! 如何在程序中利用ini动态连接access和sql数据库,高分求完整代码,不够再给! 这里的人真好
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.