首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何处理强制结束进程引发的socket 10053异常(补充)

2012-03-30 
如何避免强制结束进程引发的socket 10053错误(补充)主要使用控件ServerSocket和ClientSocket。简单的聊天程

如何避免强制结束进程引发的socket 10053错误(补充)
主要使用控件ServerSocket和ClientSocket。
简单的聊天程序:客户端登录->服务端添加用户列表;客户端退出->服务端删除该用户信息。一般情况下一切正常,但如果客户端登录后被任务管理器强制结束进程的话,服务端报10053错误,且不会删除该用户信息,导致其他用户认为该用户仍然在线。
任务管理器强制结束进程时好像不会触发程序的任何事件,那么在这种情况下如何捕获并进行相应的离线处理呢。
简化程序片段:
void __fastcall TFormMain::N1Click(TObject *Sender)
{
  if (!ClientSocket1->Active)
  ClientSocket1->Active = true;
  ClientSocket1->Socket->SendText("ok");
}
void __fastcall TFormMain::N2Click(TObject *Sender)
{
  ShowMessage(ServerSocket1->Socket->ActiveConnections);
}
正常情况下,可以返回正确的登录用户总数,强制结束后ActiveConnections不会减少,弹出10053错误。

[解决办法]
在onError里去做判断
如果ErrorCode是10053
那么关闭socket 并且ClientSokcet->Close()

热点排行