SFML и C++ Уроки \ Разработка игр › Форумы › SFML Network › Ряд вопросов › Ответ в теме: Ряд вопросов
Эти функции возвращают Ип адресс той программы в которой они используются, а мне нужно На стороне сервера узнать подключенных клиентов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
UdpSocket socket; socket.bind(55002); // Создание пакета, с помощью которого можно будет общатся с клиентом Packet packet; // Запрос и вывод СВОЕГО Ip адреса IpAddress ip = IpAddress::getLocalAddress(); cout << "Server created with ip: " << ip << endl; char buffer[1024]; std::size_t received = 0; IpAddress sender; unsigned short port; // Прием первого сообщения от клиента с Ип адресом socket.receive(buffer, sizeof(buffer), received, sender, port); cout << buffer << ":" << port << std::endl; // Отправка клиенту успешного подключения std::string message = "Connected to " + sender.toString(); socket.send(message.c_str(), message.size() + 1, sender, port); cout << "blalala: " << ip << ":" << port << endl; cout << socket.getLocalPort(); |
Вот как тут видно, я получаю сообщение от клиента и тем самым могу узнать его ип и порт. Но от этого легче не стало..
Поскольку появился ряд вопросов.
Как сделать список клиентов?
Как узнать отключился ли клиент?
Как отсылать всем клиентам сообщения?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
while (true) { socket.receive(buffer, sizeof(buffer), received, sender, port); packet >> buffer; cout << "Client: " << buffer << endl; packet << buffer; //Пакуем значения координат в Пакет socket.send(buffer, sizeof(buffer) + 1, sender, port); //Отправка данных packet.clear(); //Чистим пакет sleep(sf::milliseconds(10));//Задержка } |
Как видно из цикла то при получении сообщения от клиента, я могу отправить только ему обратное сообщение.
Действует некий прицип
Клиент1 >> Сервер
Сервер >> Клиент1
Но если подключится еще один клиент то получается так
Клиент1 >> Сервер
Сервер >> Клиент1
Клиент2 >> Сервер
Сервер >>Клиент 1
А мне нужно что бы сервер работал со всеми клиентами и отправлял пакеты всем клиентам
Клиент1 >> Сервер
Сервер >> Клиент2, Клиент3, Клиент16….
Для этого нужно сделать Массив Ип адресов ну или список, но немогу понять как???
1 |
sf::IpAddress sender; |
как сделать список?