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);
}
//清空所有在线用户的用户名列表框
//发送更新后的列表框和欢迎信息
}
} 展开
现在的问题是:客户端登陆时可以成功更新服务器端和在线客户端的用户列表框,但客户端断开时,服务器端的列表框可以更新,而其他在线客户端的列表框更新会出错,请教各位该如何解决。
相关代码如下:
服务器端的:
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);
}
//清空所有在线用户的用户名列表框
//发送更新后的列表框和欢迎信息
}
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询