2016-06-23 7 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 어떻게 메시지를 브로드 캐스트하기 위해 연결된 (클라이언트) 연결 목록을 저장합니까? 동일한 목표를 가진 다른 스레드에서 제공되는 모호한 대답 중 하나는 "연결 추적"입니다. 위의 코드에서 마지막 for 루프를 통해 연결을 반복해야한다는 것을 알았습니다. 모든 소켓이 모두 같다고 말했기 때문에 클라이언트를 구별하는 고유 한 변수는 무엇입니까? – Lozy