在socketclient编程中客户端如何及时监测到网络中断(200分)

  • 主题发起人 主题发起人 wangchao163
  • 开始时间 开始时间
W

wangchao163

Unregistered / Unconfirmed
GUEST, unregistred user!

在WINDOWS2000立即监测到网络中断,
但在WIN98中socketclient不会立即监测到网络中断,在WIN98中如何解决问题?
(解决问题不可以用以下方法:set timer=1ms 对进行host(gethostbyname)查找.)
 
在WINDOWS2000立即监测到网络中断吗?我不相信
 

我也不信
 
在WINDOWS2000立即监测到网络中断,大概有几秒的延时你可试一试.
clientsocket.clienttype=ctnonblock;async方式.
 
我的意见!ping
 
我也不信delphi socket 不能检查到物理连接有没断开的!
只能通过发检查包来监控!!通信包也能做检查包!网络空闲时2秒发一个!!
 
怎么解决在局域网不能往外Ping数据包的问题?
 
socket使用的是TCP/IP,这种通信方式的特点决定了你不可能立刻检测到网络断了,
只能等待TIMEOUT后才行。解决的办法是client和server进行通信,如果client在规
定的时间内没有server的回应,就认为server已经断了或者网络断了。同理server端
也一样。这就是在许多系统中的"心跳机制"
 
同意Suvi的"心跳机制",不过觉得这样做不太客观.
因为有时Client不会马上给Server回应的,还是用定期发Ping的方法比较好.
具体的例子在32位深度有.
 
在uses部分 加入 wininet

function CheckOffline: boolean;
var
ConnectState: DWORD;
StateSize: DWORD;
begin
result:=InternetCheckConnection('http://www.sina.com.cn/', 1, 0);
exit;

ConnectState:= 0;
StateSize:= SizeOf(ConnectState);
result:= false;
if InternetQueryOption(nil, INTERNET_OPTION_CONNECTED_STATE, @ConnectState,StateSize) then
if (ConnectState and INTERNET_STATE_DISCONNECTED) <> 2 then result:= true;
end;
 
接受答案了.
 
后退
顶部