Как подключить к серверу несколько клиентов?

Мне нужно подключить к серверу от 0 до 16 клиентов и передавать данные между сервером и клиентом. Сервер обменялся данными с клиентом №1, если существует клиент №2 обменялся данными с ним и т.д. Может получится и такое, что клиентов нет вообще, значит нужно просто их подождать. Клиенты и сервер будут работать на одном ПК. Клиент так же может отключится (по необходимости). Насколько я понимаю сокет нужно закрывать перед переходом к другому клиенту? Как отличать клиентов друг от друга, смотреть на порт?

#include <stdlib.h>
#include <WinSock2.h>
#pragma comment (lib, "Ws2_32.lib")
#pragma warning(disable : 4996)
int main()
{
   WSADATA ws;
   WSAStartup(MAKEWORD(2, 2), &ws);

   SOCKET s;
   s = socket(AF_INET, SOCK_STREAM, 0);

   SOCKADDR_IN sa;
   memset(&sa, 0, sizeof(sa));
   sa.sin_family = AF_INET;
   sa.sin_port = htons(1234);

   char c;
   printf("s - server\nc - client\n");
   scanf("%c", &c);

   if (c == 'c')
   {
       sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
       connect(s, (const sockaddr*)&sa, sizeof(sa));
       int mas[] = { 1, 2, 3, 4, 5 };
       while (1)
       {
           send(s, (const char*)mas, sizeof(mas), 0);


           int st[5];
           memset(st, 0, sizeof(st));
           recv(s, (char*)st, sizeof(st), 0);
           for (int i = 0; i < 5; i++)
           {
               printf("%d\n", st[i]);
           }
       }
   }
   if (c == 's')
   {
       bind(s, (const sockaddr*)&sa, sizeof(sa));
       listen(s, 100);

       int buf[5];
       memset(buf, 0, sizeof(buf));

       SOCKET client_socket;
       SOCKADDR_IN client_addr;
       int client_addr_size = sizeof(client_addr);

       while (client_socket = accept(s, (sockaddr*)&client_addr, &client_addr_size))
       {
           printf("connect OK\n");

           while (recv(client_socket, (char*)buf, sizeof(buf), 0) > 0)
           {
               for (int i = 0; i < 5; i++)
               {
                   printf("%d\n", buf[i]);
               }
               int nm[] = { 5, 4, 3, 2, 1 };
               send(client_socket, (const char*)nm, sizeof(nm), 0);
           }
       }
       closesocket(s);
       return 0;
   }
} 

Ответы (0 шт):