检测网络不通的情况(如网线被拔掉)(50分)

  • 主题发起人 主题发起人 huibaij
  • 开始时间 开始时间
H

huibaij

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要实现一个服务器/客户端程序,需要在服务器端检测与客户端的连接是否可用。
我用了select调用,但是该调用似乎不能检测到网络是否可达;当然我也可以不断从
服务器给客户端发起通讯包,如果没有接收到回应,就认为连接断开了或者采用超时技术。
可是我认为服务器应该可以通过某种方式(如某个系统调用)检测到客户端是否可达,
有哪位高手知道,请不吝赐教,感激不尽!
 
在程序添加ping的功能,若能够ping通则证明网络通畅
 
用PING,如果PING的通,说明可以连接,PING不通,就不能连接
还有如果网线被拔掉,就用GetHostByname,得到的IP是NIL的时候说明网线被拔了
 
procedure GetNetWorkLinked;
begin
if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then
ShowMessage('网络连通')
else
ShowMessage('网络断开');
end;
 
Only You:你的方法不可行。
我测试了,把你的函数放在Time中。拔掉网络线。
此时,程序并不知道断开了。
但是系统中网络连接的图标,明显告诉我们。网络线断开了。
我想Windows中一定有这样的API函数来检测它。
请高手出手。
 
用Ping是不行的。如果服务器端的防火墙不让Ping,就错误了。用GetHostByname还是可以的。
试试这个。
procedure TForm1.Button1Click(Sender: TObject);
var
WSData:TWSAData;
Buffer:array[0..63]of Char;
HostEnt:PHostEnt;
PPInAddr:^PInAddr;
//字符串格式IP
IPString:String;
begin
IPString:='';
WSAStartUp($101,WSData);
try
GetHostName(Buffer,SizeOf(Buffer));
HostEnt:=GetHostByName(Buffer);
if Assigned(HostEnt) then
begin
PPInAddr:=@(PInAddr(HostEnt.H_Addr_List^));
while Assigned(PPInAddr^)do
begin
IPString:=StrPas(INet_NToA(PPInAddr^^));
if IPString='127.0.0.1' then
showmessage('没有连接')
else
showmessage(IPString+'已经连接');
Inc(PPInAddr);
end;
end;
finally
WSACleanUp;
end;
end;
 
我试了。在执行到WSAStartUp($101,WSData);时,程序出现异常。
怎么回事?怎么处理?
 
判断机器是否网络状态,在我的程序中已通过
//别忘了在uses中加入WinInet
uses WinInet;
--------------------------------------------------------------------------------
//函数定义
function GetOnlineStatus : Boolean;
var ConTypes : Integer;
begin
ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
if (InternetGetConnectedState(@ConTypes, 0) = False)
then
Result := False
else
Result := True;
end;

--------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
if not GetOnlineStatus then
ShowMessage('计算机没有连接网络!')
else
ShowMessage(' 计算机处于网络状态!');
end;
 
LGS:你的程序不行啊!我测试了,把你的函数放在Time中。拔掉网络线。
此时,程序并不知道断开了。杂回事啊?
 
后退
顶部