如何知道对方机器因掉电而断开了与我的联接(100分)

  • 主题发起人 主题发起人 askall
  • 开始时间 开始时间
A

askall

Unregistered / Unconfirmed
GUEST, unregistred user!
如何知道对方机器因掉电而断开了与我的联接
我用BCB6 中的 indy IDTcpServer 控件监听可能几十个或者更多的客户端联接
每个联接上来都必须要保存
我用TIdPeerThread **TcpThread 表来保存每个联接的

如果客户端正常断网,我是能处理的,但如果对方掉电,该怎么处理呢?
我想释放相应的资源.
 
既然是监听,你肯定有办法发消息,然后等消息返回吧?没返回消息的,应该是出了问题的吧?
 
试试,贴的是Delphi的代码
uses WinSock2;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal;
KeepAliveInterval: Cardinal
end;
var
Val: TCP_KeepAlive;
Ret: DWord;
begin
Val.OnOff:=1;
Val.KeepAliveTime:=6000; //6s
Val.KeepAliveInterval:=6000; //6s
WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
@Val, SizeOf(Val), nil, 0, @Ret, nil, nil)
end;
 
uses WinSock2;
这句就出错的,找不到WinSock2单元。
 
VB6的WINSOCK就很好的解决了这个问题
他的WINSOCK封装得很好
 
xf-wangyi, 的方法不错 应该可以 检测,也可以在发数据时检测连接状态也可以不过不及时
 
一直发心跳数据
 
我在深圳南山白石洲,想学delphi编程,苦于无法入门,想拜delphi高手为师,兼职以小时计。有兴趣的老师与我联系:QQ:75235568 手机:13714669648

我懂asp,MSSQL,c语言。领悟力强,绝不会丢老师的脸。
 
掉电也会有消息吗?
你网线断了,交换机换了,网卡坏了,和断电如何区分?
 
来自:weiliu, 时间:2006-7-21 14:32:51, ID:3512517
掉电也会有消息吗?
你网线断了,交换机换了,网卡坏了,和断电如何区分?



确实,只要不能上网就是一样的, 除非他在你旁边,
肯定会大叫一声:"MD,又停电了!"
 
哦,没有WinSock2

你是用Indy吧

uses idWinSock2;

拔掉网线没问题的,呵呵,就用上边的代码就可以了
 
xf-wangyi 老兄,你的代码是什么意思,能具体解释一下吗?

我已经在我的 IdTCPServer1Connect 中加了你的代码,可是,没有看出有什么效果
 
掉电不会有消息的

隔一段时间发送消息判断是否在线,在线的客户端会回复
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3438148
 
TCP自己的心跳测试,老早前收集的,以前用过,断电没试过,拨网线有用

应该会会触发OnException和Disconnect
 
在 BCB6 中要想实现 xf-wangyi 的方法需要做
#include<winsock2.h>
Add to Project ws2_32.lib
 
后退
顶部