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

Description of your first forum.

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

帖子huibaij » 星期日, 2002年6月9日 11:32


我需要实现一个服务器/客户端程序,需要在服务器端检测与客户端的连接是否可用。
我用了select调用,但是该调用似乎不能检测到网络是否可达;当然我也可以不断从
服务器给客户端发起通讯包,如果没有接收到回应,就认为连接断开了或者采用超时技术。
可是我认为服务器应该可以通过某种方式(如某个系统调用)检测到客户端是否可达,
有哪位高手知道,请不吝赐教,感激不尽!
 
 
 

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

帖子bianlx » 星期日, 2002年6月9日 11:36


在程序添加ping的功能,若能够ping通则证明网络通畅
 
 
 

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

帖子张无忌 » 星期日, 2002年6月9日 11:37


用PING,如果PING的通,说明可以连接,PING不通,就不能连接
还有如果网线被拔掉,就用GetHostByname,得到的IP是NIL的时候说明网线被拔了
 
 
 

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

帖子only you » 星期日, 2002年6月9日 12:44


procedure GetNetWorkLinked;
begin
 if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then
   ShowMessage('网络连通')
 else
   ShowMessage('网络断开');
end;
 
 
 

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

帖子nzfsoft » 星期五, 2002年12月27日 11:08


Only You:你的方法不可行。
我测试了,把你的函数放在Time中。拔掉网络线。
此时,程序并不知道断开了。

但是系统中网络连接的图标,明显告诉我们。网络线断开了。
我想Windows中一定有这样的API函数来检测它。

请高手出手。
 
 
 

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

帖子ghg_qh » 星期日, 2003年5月11日 15:09


gz
 
 
 

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

帖子jdelphi » 星期日, 2003年5月11日 16:40


用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;
 
 
 

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

帖子nzfsoft » 星期二, 2003年5月20日 10:19


我试了。在执行到WSAStartUp($101,WSData);时,程序出现异常。
怎么回事?怎么处理?
 
 
 

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

帖子LGS » 星期五, 2003年6月6日 14:01


判断机器是否网络状态,在我的程序中已通过
//别忘了在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;
 
 
 

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

帖子Djoin » 星期一, 2003年11月24日 16:27


LGS:你的程序不行啊!我测试了,把你的函数放在Time中。拔掉网络线。
此时,程序并不知道断开了。杂回事啊?