處理多個客戶端目前我使用的成功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,這會導致崩潰和死鎖。您需要重新編寫此代碼。 –