2016-06-23 51 views
1

我的服務器應該將收到的消息轉發給所有連接的客戶端,但我的代碼只能將消息發回給發件人。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 
    } 
+0

請發表[mcve] – purplepsycho

回答

1

當您在服務器套接字中接受套接字時,將其存儲在數組列表中。當客戶端離開時,將其從數組中移除。

使用此陣列,您可以向活動客戶端發送和廣播數據。

+0

介意解釋爲什麼我沒有得到正確的結果,儘管我的做法與您的答案相同? – Lozy

+0

@懶惰不,它不是。你總是在同一個套接字上發送。 – EJP

+0

@EJP然後,我如何存儲連接(客戶端)連接的列表,以便廣播消息。在另一個具有相同目標的線程上給出的含糊答案之一是「跟蹤連接」 我相信我知道這意味着什麼,我只需通過上面代碼中的最後一個for循環迭代連接。既然你說過所有的套接字都是一樣的,那麼區分客戶端的唯一變量是什麼? – Lozy

相關問題