TCustomWinSocket
当服务端程序退出又登录上后,客户端保持不变的情况下
用下边的代码,可能找回连接吗?
TCustomWinSocket* __fastcall TMainForm::GetSocketByServerIp(AnsiString rmIp)
{
int mConns= ServerSocket1->Socket->ActiveConnections;
if(mConns>0)
{
for(int i=mConns-1;i>=0;i--)
{
if(ServerSocket1->Socket->Connections[i]->RemoteAddress==rmIp)
return ServerSocket1->Socket->Connections[i];
}
}
return NULL;
}
[解决办法]
肯定不行。先不说TCP/IP建立连接的三次握手过程,重启后ServerSocket1->Socket->Connections[i]就是空的。
ServerSocket1->Socket->Connections[i]里边保存的是被服务器Socket的Accept后的Socket,程序重启,没有客户端连接上,它就是空的。
常见的做法是在ClientSocket的OnError事件中,启动一个Timer,让Timer定时尝试连接服务器程序,然后在OnConnect事件中停掉Timer