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);

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

}

这个
我估计大概是这样子的
1.断开是客户端断开连接的时候 发送一个消息给服务器说我断开了
比如发 D+用户帐号
2.服务器收到 D开头的信息 然后把帐号解出来 从用户列表中删除这个帐号对应的用户
3.刷新用户列表

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

参考资料:仅供参考

温馨提示:内容为网友见解,仅供参考
无其他回答

C++builder ServerSocket和ClientSocket控件的使用问题
当client socket连接开始时启动SERVER与之对应的线程(非阻塞不重点)

C++ Builder ServerSocket
这个问题,如果是在单线程中,应该是不会出现这样的情况的。ServerSocket1ClientConnect事件,是在第一次连接的时候产生的,每建立一个新连接就会产生一个。在这之前会先触发 AcceptServerSocket1事件。当连接建立好后,客户端发送数据。在服务端的ServerSocket1ClientRead事件中是可以捕捉得到的。1,建立连...

关于C++builder程序出错的问题
Private:\/\/User declarations ServerStatus CurrentServerStatus;Void SetServerStatus(ServerStatus_serverstatus);enum ServerStatus {SS_NOT_RUNNING,SS_RUNNING};enum LogEntryType {LET_WARNING,LET_ERROR,LET_SIGNON,LET_SIGNOFF};enum ServerNotification {SN_LOGON,SN_LOGOFF,SN_PUBLIC_MSG,SN_PRIVATE...

C++ Builder中Socket 套接字问题
if(SOCKET_ERROR==retVal){ closesocket(sServer);WSACleanup();return -1;\/\/开始监听失败 } sockaddr_in addrClient;int addrClientlen=sizeof(addrClient);sClient=accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);if(INVALID_SOCKET==sClient){ closesocket(sServer);WSACleanup();...

请教c++ socket编程中的问题
拔网线应该是返回0的,因为正常情况下,tcp在不使用心跳的情况下(即使使用一般是2个小时一次心跳检查),是没办法知道对方已经断掉的 至于你说的关server,要看哪种关法,是kill掉,关机,还是直接断电,一般kill和关机,client是能感知道server端断掉了,如果是直接断点一般无法感知 再其次,客户端select...

用c++builder做通信时出错:“Asynchronous socket error 10053”,怎么...
10053的错误消息是 您的主机中的软件放弃了一个已建立的连接。

木马是怎么利用电脑系统的漏洞来进行攻击的?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的...

你好!各位高手,请问要怎么做木马啊?
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:{ FILE *fp=NULL;char * content;int times_of_try;char TempFile[MAX_PATH];\/\/定义了一堆待会儿要用到的变量 sprintf(TempFile, "%s%2 首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们...

C++,socket编程,server端接收的数据不完整,中间参杂十六进制的CDCDCDCD...
第二个问题,要理解recv函数的工作流程,它是有数据就读,虽然你设置了4000的大小,但假如当时只接收到3600个字节,它也会返回,因此readLen就是3600,不是4000。而后面那句 p = p + 4000; 也应该改成 p = p + readLen;要想得到你预期的效果应该把server那里改成 char *p = (char*)rawData...

如何编写木马程序?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的...

相似回答
大家正在搜