C++ [UDP] Как отслеживать все подключенные (клиентские) сокетные соединения на сервере?

Мой сервер должен переслать сообщение, которое он получил, всем подключенным клиентам, но мой код может только отправить сообщение обратно отправителю.

struct User
{
    char user_id[20];
    string address;
    struct sockaddr_in CONNECTED;
}U[8];

//USER LOGIN
    for(int i = 0; i < 8; i++)
    {
        //DO THIS WHEN USER MATCHED
        //user_id consists of Andrew, Lisa, David and etc
        //so that each unique name has a unique connection(CONNECTED)
        if(strcmp(user_id,U[i].user_id) == 0)
        {
            U[i].CONNECTED = cln_addr;
        }

    }

        //AFTER RECEIVING THE MESSAGE FROM CLIENT, SEND THE MESSAGE BACK TO ALL CONNECTED CLIENTS
        for(int i = 0; i < 8; i++)
    {
        sendto (*csock, BROADCASTMESSAGE, sizeof BROADCASTMESSAGE, 0, (struct sockaddr *)&U[i].CONNECTED, len_c_addr); //THIS HOWEVER ONLY FORWARD MESSAGE BACK TO THE SENDER
    }

1 ответ

Решение

Когда вы принимаете сокет в сокете сервера, сохраняйте его в списке массивов. Когда этот клиент исчез, удалите его из массива.

с помощью этого массива вы можете отправлять и транслировать данные своим активным клиентам.

Другие вопросы по тегам