【发布时间】:2015-07-18 23:04:25
【问题描述】:
我正在学习 Winsock,并尝试创建一些简单的程序来了解它。我设法创建了可以处理多个连接的服务器,还根据所有教程管理它们和客户端,它正在按预期工作,但是:
我尝试创建循环,检查是否有任何客户端断开连接,如果断开连接,我想关闭它。
我设法编写了一些东西来检查套接字是否已断开连接,但它不会同时连接 2 个或多个套接字
如果每个客户端已断开并关闭套接字,任何人都可以给我答复如何通过每个客户端进行工作循环检查?这一切都是为了让最大客户端一次连接到服务器。提前致谢。
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);
}
【问题讨论】:
-
您提供的示例代码没有提供足够的细节来提供帮助。提供的代码部分是循环调用的函数吗?您在调试器中看到了什么?
-
@advent 为什么拒绝我对您的示例代码的编辑?它的格式不可读。
-
我不认为这是必要的编辑。它是完整的代码,无需声明套接字、绑定和侦听。我将添加整个循环。
标签: c++ client-server winsock