如何在中间层判断客户端已经断开连接(300分)

  • 主题发起人 主题发起人 forest gun
  • 开始时间 开始时间
F

forest gun

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:
1、请给出使用dcom和socket的具体代码
2、注意是在中间层判断,我不希望出现需要在客户端写的代码
 
远程模块的ondestroy时间不是处理客户端断开吗?!
 
自己提前一下。
看来300分是白丢了,估计做3层的没人会作这东东,似乎很简单,但我还没在dfw中
发现一个好方法。
 
非常关注,我也愿出100分!
 
http://delphi.mychangshu.com/dispdoc.asp?id=199
 
我以前作過,看你要求是不是這樣的:
在中間層的datamodule的oncreate事件中寫下代碼
mainfrm.UpdateClientCount(1);
在中間層的datamodule的ondestroy事件中寫下代碼
procedure TDATAFRM.RemoteDataModuleDestroy(Sender: TObject);
begin
mainfrm.UpdateClientCount(-1);
end;


在中間層的mainform上放一個label標簽,取名是clientcount
procedure UpdateClientCount(Incr: Integer);
procedure TMainFrm.UpdateClientCount(Incr: Integer);
begin
FClientCount := FClientCount + Incr;
ClientCount.Caption := IntToStr(FClientCount);
end;

 
to ggltechggl,你的方法可以用于客户端正常退出,但非正常呢?
根据我个人的经验,这似乎是不可能的,而且即使是delphi本身都不行,但我不能肯定,
还希望大家继续。
dfw中类似我这个问题的问题很多,但每次都越扯越远,没有个结果,希望这次能比较圆满。
 
小弟现在程序的做法是,在中间层做一个 TUSER 的类,其中初始化的时候使用timeSetEvent 规定在
若干秒后启动一个TimerCallBack 函数来通知中间层删掉自己,每个客户登陆到中间层,
就分配一个TUSER的变量到客户维护表中。客户端搁几分钟就通知中间层自己还在线,然后
中间层就对该名客户做 timekillevent(ft);timesetevent(...);
反正客户端过段时间没有
反映的话,中间层也是要把他删掉的。当然,也可以是客户端每对中间层做一次操作中间层
就对该名客户做 timekillevent(ft);timesetevent(...);
不知道有没有其他的办法?
 
没有办法,似乎无法解决了。
 
后退
顶部