как пометить клиентов с помощью winsock - PullRequest
0 голосов
/ 15 января 2012

У меня запущена простая программа-клиент winsock на сервере. И хочу знать и добавить 2 вещи к нему.

Как мне пометить / идентифицировать клиентов?

А сможете ли вы отправлять ВСЕМ клиентам данные после подопечных?

Это соединение, которое у меня есть на данный момент. «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 голосов
/ 15 января 2012

Каждый клиент, подключенный к вашему серверу, уже имеет свой собственный идентификатор 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))); 
  }
}
...