2016-06-23 9 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

@Lozyそうではありません。あなたはいつも同じソケットで送信しています。 – EJP

+0

@EJPどのようにメッセージをブロードキャストするために接続された(クライアント)接続のリストを保存するのですか?同じ目標を持つ別のスレッドで与えられた漠然とした答えの1つが「接続の追跡」 私はそれが何を意味していると信じているのですか?上のコードの最後のforループを通して接続を繰り返す必要があります。あなたはすべてのソケットがすべて同じだと言ったので、クライアントを区別するユニークな変数は何でしょうか? – Lozy

関連する問題