Почему мой TcpSocket получает точно такие же данные? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь отправить одно значение нескольким 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++;
        }

И я хочу, чтобы все клиенты получали одинаковые номера.

...