如果客户端突然关机,服务器端怎么才能监测到该clientsocket已经掉线?

tfm 2004-03-31 07:47:09
如果遇到突然关机或者掉线的情况,服务器怎么才能监测到该clientsocket已经掉线?因为客户端比较多,如果采取服务器端隔一定的时间向每个客户端都发一条消息的话,效率会有点低,请问各位达侠有没有什么好的办法!
...全文
254 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bales 2004-04-06
  • 打赏
  • 举报
回复
当客户端断开后,服务端的ClientDisconnect事件自动被激活。
Kenn 2004-04-06
  • 打赏
  • 举报
回复
procedure TFrmMain.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode = 10053 then
begin
MessageBox(Handle, '客户端退出!', '提示', MB_OK);
ErrorCode := 0;
end;
end;
net_jun 2004-04-03
  • 打赏
  • 举报
回复
只服务器向客户端定期发消息,如收不到反馈,就进行clientdisconcect。
fansnaf 2004-04-03
  • 打赏
  • 举报
回复
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
tfm 2004-04-03
  • 打赏
  • 举报
回复
我说的是客户端突然掉线,客户端在机器突然断电的时候是没有什么反映的,更不会向服务器发送什么消息的.而此时服务器端onclienclose事件也监测不到该客户端是否掉线,除非向客户发送消息!
wgj1922 2004-04-01
  • 打赏
  • 举报
回复
serversocket的clientdisconcect事件可以对客户端断开连接做出响应。
insert2003 2004-04-01
  • 打赏
  • 举报
回复
最好是在客户端加一定时器(Timer)每隔一段时间就身服务器发送在线消息。
如果服务器过了这段时间后还未收到消息,就说明客户端关闭了!
我就是这么做一个程序
whitetiger8 2004-04-01
  • 打赏
  • 举报
回复
建议可以定时的检测一下客端。 最好由客户端定时的向服务器发出在线通过。如果服务器接不到了,说明客户掉线了
aehousmantao 2004-03-31
  • 打赏
  • 举报
回复
如果服务器承载能力很强的话,你可以试一下,通过放松ICMP包看看它的反馈信息!不过在局域网里是很好的方法!如果在公网里,会引起网络堵塞!
knife_s 2004-03-31
  • 打赏
  • 举报
回复
在客户端比较多的情况,是没有办法的,你看看目前的网络游戏就知道,客户端掉线后,并不是实时反应在服务器端的,

也只能间隔一定时间发送消息
stanely 2004-03-31
  • 打赏
  • 举报
回复
serversocket有个事件:onclose
通过里面的参数socket就能得到远端socket的信息,如remoteaddress
环境:Windows XP SP3、 VC++ 6.0、 Windows 2003 SDK 使用步骤: 1、下载解压之后,使用VC++ 6.0打开两个工程:一个是SocketServer和一个ClientSocket工程。 2、首先运行服务器端工程,选默认的端口1008 3、然后运行客户端工程,选默认的端口1008和默认的服务器地址 4、再运行多个客户端进程 5、如果一切正常,可以每个客户端的消息发送,我们可以在服务端和各个客户端同步看到消息 实现一个服务器对多个客户端的关键是,在服务端的使用集合CPtrList类用保存客户端socket对象,思想与Java中的编程思想一样,只不过Java中会使用多线程技术,在Vector集合保存客户端socket对象,而MFC框架提供了CSocket类,它是一个异步通信的类,所以看上去代码比较Java的多线程代码简单的实现了一个对多的即时通讯功能。另外,MFC提供了CSocketFile类和CArchive类与CSocket类实现了C++的网络通讯编程功能。 本示例注释非常详细,所有的辅助类都放一个util目录中,然后在工程中分了一个目录来管理这些辅助类,使用代码非常清晰。手动书写部分的代码是按Java的规范书写,当然其它代码由IDE生成的,所以是MS的风格,所以当你看代码时,只要是使用“骆驮命名法”的方法都是本人书写的功能性代码。 参看的思路:在服务端要从回调方法onAccept读起;而客户端代码主要从OnSendButton方法读起,即可理解整个代码的意思。 阅读对象:具有Java的Socket编程经验的人员,并且希望能够书写出比Java效率更高的即时通讯程序的人员

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧