Как подключить к серверу несколько клиентов?
Мне нужно подключить к серверу от 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;
}
}