Я пытаюсь отправить одно значение нескольким TcpSockets, но каждый клиент получает собственное значение.
У меня есть переменная под названием clientCounter, в clientCounter есть количество клиентов, которые подключены. Сервер отправляет всем клиентам количество клиентов, которые подключены. При подключении 1 отправляется всем клиентам.
Теперь результаты: например, когда подключено 4 клиента, Клиент1 получает номер 1, Клиент2 - номер 2 и т. Д ...
Но результат должен быть следующим: каждый клиент должен получить номер 4, когда, например, четыре клиента подключены.
Основная нить:
int main(){
Server server;
while (true) {
server.Send(server.GetPlayerCount());
}
return 0;
}
Количество клиентов хранится там:
std::atomic<unsigned int> clientCounter;
int Server::GetPlayerCount()
{
return clientCounter;
}
Показывает функцию, которая отправляет данные всем клиентам:
void Server::Send(int m)
{
for (int i = 0; i < clientCounter; i++) {
sf::Packet packet;
packet << m;
if (clients[i].send(packet) != sf::Socket::Status::Done) {
std::cout << "Cant send Packet" << std::endl;
}
packet.clear();
}
}
Это то, что делает клиент:
sf::Packet packet;
int count = 0;
while (true) {
socket.receive(packet);
packet >> count;
std::cout << count << std::endl;
}
Когда клиент подключен, clientCounter добавляет один:
if (listener.accept(clients[clientCounter]) != sf::Socket::Status::Done) {
std::cout << "Error cant get Socket..." << std::endl;
}
else {
std::cout << "New client connected: " << clients[clientCounter].getRemoteAddress() << std::endl;
clientCounter++;
}
И я хочу, чтобы все клиенты получали одинаковые номера.