如何使用winsock标记客户端

时间:2012-01-15 18:25:06

标签: c++ c windows winsock

我有一个简单的服务器客户端winsock程序正在运行。并想知道并添加两件事。

如何标记/标识客户?

能够在病房后发送所有客户数据吗?

这是我目前的连接循环。 “client_id [a]”是我试图标记/标识客户端但可能不正确的内容。

for(;;)
{
 if(Connect = accept(Listen, (SOCKADDR*)&Server, &size))
  {
    std::cout<<"\nConnection was reached";    
    a = a +1;
    client_id[a] = accept(Listen, (SOCKADDR*)&Server, &size) ???
  }
}

使用C / C ++和windows。

希望有人可以帮我解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:0)

连接到服务器的每个客户端都有自己的标识符SOCKET。不要使用您的自定义标识符。也使用动态数组 - &gt; std :: vector或map以保持您的客户。

此外,你有双重接受,你将失去每一秒连接。

std::vector< SOCKET > clients;
...
for(;;)
{
 if(Connect = accept(Listen, (SOCKADDR*)&Server, &size))
  {
    std::cout<<"\nConnection was reached";    
    clients.push_back( Connect )
  }
}

如果是地图,您可以使用

std::map< SOCKET, YouClientClass > clients;
...
for(;;)
{
 if(Connect = accept(Listen, (SOCKADDR*)&Server, &size))
  {
    std::cout<<"\nConnection was reached";    
    clients.insert( std::make_pair( Connect, YourClientClass(Connect))); 
  }
}