处理多个客户端目前我使用的成功TIdTCPServer和TIdTCPClient Indy组件服务器和客户端完全做,但我得到了麻烦时,两个客户端连接到服务器在同一时间。我有两个网络192.168.10.23
和localhost
,当客户端使用本地主机连接时很好,第二个客户端尝试连接到192.168.10.23
仍然在等待第一个客户端断开连接。如何利用Indy 10
任何人都可以请给我建议如何处理使用Indy10的多个客户端。
补充:
这是我的代码:
void __fastcall TfrmServer::TCPServerConnect(TIdContext *AContext)
{
TList *list = TCPServer->Contexts->LockList();
try
{
for (int j=0; j < list->Count; j++)
{
TIdContext *myContext = static_cast<TIdContext*>(list->Items[j]);
CLIENT_AUTH(myContext);
INFO_CLIENT *br = ((INFO_CLIENT*)brb);
br->ClientIP = myContext->Binding()->IP;
br->ClientPort = myContext->Binding()->Port;
br->peerIp = myContext->Binding()->PeerIP;
br->peerPort = myContext->Binding()->PeerPort;
if (myContext->Connection->Connected())
{
for (int i=0; i < list->Count; i++)
{
ListIt = ListClient->Items->Add();
ListIt->Caption = String(i+1); // number
ListIt->SubItems->Add(br->UserName); // Name
ListIt->SubItems->Add(br->ClientIP); // Ip
ListIt->SubItems->Add(br->peerIp); // Peer Ip
ListIt->SubItems->Add(br->ClientPort); // port
ListIt->SubItems->Add(br->peerPort); // port
ListIt->SubItems->Add("Connected"); // Status
}
}
}
}
__finally
{
TCPServer->Contexts->UnlockList();
}
}
这篇代码有多个客户端的支持?
你所示的代码是完全错误的。你需要摆脱它。当“TIdTCPServer :: Contexts”列表被锁定时(您根本不应该这样做),但没有其他客户端可以连接到服务器。而且你正在从主线程的上下文之外操纵UI,这会导致崩溃和死锁。您需要重新编写此代码。 –