2015-02-02 3 views
0

등록 된 여러 클라이언트에서 UDP 프로토콜을 통해 메시지를 브로드 캐스팅하려고합니다.UDP 소켓을 통해 브로드 캐스트하는 방법은 무엇입니까?

나는 우리가 보내고 소켓을 통해 수신 두 명령 아래 필요가 생각 : 우리가 볼 수 있듯이

sendto(sock,buffer, 
      strlen(buffer),0,(const struct sockaddr *)&server,length); 

recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length); 

, 우리는 두 번째받는 사람의 주소 인 마지막으로, 같은 6 인수가 필요합니다. 서버 간 클라이언트의 경우 주소가 있습니다. 그러나 서버 간에는 메시지가 수신 된 마지막 클라이언트의 주소 만 있습니다.

나는 한 번 서버에 연결하는 모든 소켓의 주소를 저장하려고 시도 했으므로 sendto()를 사용할 수 있습니다. 그러나 모든 클라이언트가 동일한 컴퓨터에서 실행 중이므로 그 &from은 같게 보입니다.

어떤 대안이 있습니까? 내가 어디로 잘못 가고 있니? 로컬 컴퓨터에서 실행되는 모든 클라이언트에 메시지를 브로드 캐스팅하기 만하면됩니다. ?

+0

나는 혼란 스럽다. '브로드 캐스트 '대신에'멀티 캐스트'를 의미합니까? –

+0

모든 클라이언트에게 동시에 메시지를 보내려고합니다. – mkkhedawat

+0

'struct sockaddr_in' 구조체를 확인하십시오. _port number_ ['sin_port']라는 것이 있습니다. –

답변

0

보내는 UDP 브로드 캐스트는 네트워크 스택 구현에서 기본적으로 허용되지 않을 수 있습니다. 당신은 어떤 환경에서 브로드 캐스트를 사용하도록 설정해야합니다 : setsockopt를의

int allow_broadcast = 1; 
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void*) &allow_broadcast, sizeof(allow_broadcast)); 

실제 매개 변수 목록이 1 또는 2처럼 OS의 문서에 사용할 수 있습니다.

관련 문제