UDP обрабатывает несколько клиентов - PullRequest
1 голос
/ 22 ноября 2011

Я не могу понять, как сделать следующий шаг для моего UDP-сервера. Пока один клиент подключается, а затем отправляет данные туда и обратно, но когда подключается другой клиент, сервер будет принимать данные от нового клиента и отправлять их другому.

Я собирался проверить, получено ли сообщение, полученное от нового клиента, или нет, а затем дать этому клиенту идентификатор, который сервер использует для некоторой обработки. Это правильный способ сделать это? Если так, то как ты это делаешь? Я знаю, что в recvfrom есть поле «sockaddr * from», которое, как я полагаю, заполняет это поле данными клиента, но как мне использовать эти данные?

Спасибо

Ответы [ 3 ]

1 голос
/ 22 ноября 2011
sockaddr_in saddr;
int length = sizeof(saddr);
int read = recvfrom(your_socket, buff, 4096, 0, (sockaddr*)&saddr, &length);
if(read != -1) {
   // now saddr contains the address of the client
   // the g_addr is a previously captured client address
   if(saddr.sin_addr.S_un.S_addr = g_addr.sin_addr.S_un.S_addr) {
      // returning client?
   } else {
      // not yet seen client, so store address
   }
}
1 голос
/ 22 ноября 2011

UDP не требует подключения. Попробуйте использовать TCP. Почему вы решили использовать UDP? Каковы ваши ограничения?

0 голосов
/ 22 ноября 2011

Адрес в функции recvfrom будет заполнен исходной информацией от клиента.В случае, если UDP даст вам адрес и порт, который для IPv4 может быть легко преобразован в длинный и сохранен в качестве идентификатора.IPv4 составляет 4 байта + порт 2 байта.Вам нужно будет привести указатель к sockaddr_in, а затем получить значения sin_port и sin_addr.

...