C++builder中ServerSocket的ClientDisconnect事件问题?

小弟在做聊天室,需要当一个客户端登陆或者推出到聊天室时,同时更新服务器和其他在线客户端的在线用户列表框。现在的问题是:客户端登陆时可以成功更新服务器端和在线客户端的用户列... 小弟在做聊天室,需要当一个客户端登陆或者推出到聊天室时,同时更新服务器和其他在线客户端的在线用户列表框。
现在的问题是:客户端登陆时可以成功更新服务器端和在线客户端的用户列表框,但客户端断开时,服务器端的列表框可以更新,而其他在线客户端的列表框更新会出错,请教各位该如何解决。
相关代码如下:
服务器端的:
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,TCustomWinSocket *Socket)
{
String s,sUserInfo;
int iIndex;
iIndex=ListUserAdd->Items->IndexOf(Socket->RemoteAddress);
ListUserAdd->Items->Delete(iIndex);
ListUserName->Items->Delete(iIndex);
MyBroadcast("clear");
Sleep(10);
for(int m=0;m<ServerSocket1->Socket->ActiveConnections;m++)
{
for(int w=0;w<ListUserName->Items->Count;w++)

{
sUserInfo="I"+ListUserName->Items->Strings[w];
ServerSocket1->Socket->Connections[m]->SendText(sUserInfo);
ShowMessage(sUserInfo);

}
//清空所有在线用户的用户名列表框
//发送更新后的列表框和欢迎信息
}

}
展开
 我来答
独落长秋
2009-05-27 · TA获得超过1535个赞
知道小有建树答主
回答量:606
采纳率:0%
帮助的人:682万
展开全部
这个
我估计大概是这样子的
1.断开是客户端断开连接的时候 发送一个消息给服务器说我断开了
比如发 D+用户帐号
2.服务器收到 D开头的信息 然后把帐号解出来 从用户列表中删除这个帐号对应的用户
3.刷新用户列表

你用这个Socket->RemoteAddress 是根据IP地址来的吧 估计不行 运行的时候 测试的都是你的机子 得到的地址是你自己的 然后你把所有的删除了?

参考资料: 仅供参考

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式