我正在學習Winsock並試圖創建一些簡單的程序來了解它。我成功地創造出可同時處理多個連接也根據所有教程,它正在它應該怎樣,但管理這些和客戶端服務器:Winsock - 客戶端斷開連接,閉合環路/最大連接數
我試圖使循環,我檢查是否有任何的客戶端有斷開連接,如果有,我想關閉它。
我設法寫的東西,如果插座斷開這將檢查,但不同時連接2個以上的插座
任何人都可以給我答覆如何使工作循環通過每一個客戶檢查如果它已斷開連接並關閉套接字?所有這些都可以讓像max客戶端一樣連接到服務器。提前致謝。
while (true)
{
ConnectingSocket = accept (ListeningSocket, (SOCKADDR*)&addr, &addrlen);
if (ConnectingSocket!=INVALID_SOCKET)
{
Connections[ConnectionsCounter] = ConnectingSocket;
char *Name = new char[64];
ZeroMemory (Name,64);
sprintf (Name, "%i",ConnectionsCounter);
send (Connections[ConnectionsCounter],Name,64,0);
cout<<"New connection !\n";
ConnectionsCounter++;
char data;
if (ConnectionsCounter>0)
{
for (int i=0;i<ConnectionsCounter;i++)
{
if (recv(Connections[i],&data,1, MSG_PEEK))
{
closesocket(Connections[i]);
cout<<"Connection closed.\n";
ConnectionsCounter=ConnectionsCounter-1;
}
}
}
}
Sleep(50);
}
的可能重複[我如何檢查是一個套接字仍然是開放的?](http://stackoverflow.com/questions/851654/how-can-i-check-is- a-socket-is-still-open) – Jorj
您提供的示例代碼未提供足夠的詳細信息以提供幫助。提供的代碼是循環中調用的函數的一部分嗎?你在調試器中看到了什麼? – Coder
@advent爲什麼拒絕編輯您的示例代碼?它的格式是不可讀的。 – Coder