2012-01-15 83 views
0

我有一个简单的服务器客户端winsock程序运行。并想知道并添加2件事情。如何用winsock标记客户端

如何标记/ ID客户端?

并且能够在病房后发送所有客户端数据?

这是我现在的连接循环。 “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。

希望有人能帮助我解决这个问题。

谢谢。

+0

你所说的“标记”是什么意思?你只是想要一个客户名单? – cnicutar 2012-01-15 18:26:43

+0

“标记”在识别/收集/记录它们,以便我可以稍后发送数据给他们。是的,只要我可以用它来发送数据,我就会猜出一个简单的客户列表。无论什么最适合这个。 – user1058431 2012-01-15 18:28:07

回答

0

连接到您服务器的每个客户端都有自己的标识符SOCKET。请勿使用您的自定义标识符。也可以使用动态数组 - > 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))); 
    } 
} 
+0

你可以添加一个简单的例子让它工作,所以我可以测试它吗? – user1058431 2012-01-15 18:31:16

+0

好吧,究竟包含我的客户是什么?所以,例如,以后我可以做一个简单的for循环并将数据发送给所有客户端? – user1058431 2012-01-15 18:34:50

+0

您的客户端将包含一个unsigned int的套接字列表,这是连接客户端的系统标识。 – AlexTheo 2012-01-15 18:41:58

相关问题