문제

UDP 소켓을 열고 포트에 바인딩하는 Linux 응용 프로그램이 있습니다. 소켓을 통해 유니 캐스트 패킷을 보내는 데 아무런 문제가 없었습니다. 방송 패킷을 보낼 기회가 있었기 때문에 Broadcast 패킷을 통과 할 수있는 So_broadcast를 활성화했지만 유니 캐스트 패킷도 방송되고 있음을 알았습니다. UDP 소켓에 대한이 행동이 예상되는 행동입니까, 아니면 무언가를 잘못 구성했을 가능성이 더 높습니까?

도움이 되었습니까?

해결책

내가 이해하는 것에서 so_broadcast 소켓 옵션입니다. 따라서 소켓에서 활성화하면이 소켓은 방송됩니다. 유니 캐스트를하고 동일한 코드에서 방송하려면 다른 소켓을 열어야한다고 생각합니다.

다른 팁

여기서 프로그래밍에 많은 손을 대지 않았지만 라이브러리, OS 버전, 코드 등에 대한 자세한 정보를 제공해야 할 것입니다. 코드 샘플일까요?

내가 읽은 책을 기억한다면, 소켓에 플래그를 설정하면 소켓에서 전송 된 모든 데이터 그램에 영향을 미칩니다. 소켓은 기본적으로 네트워크 플래그 + 파일 디스크립터의 데이터 구조이기 때문입니다.

나는 소켓이 유니 캐스트를 받고 동시에 방송되는 것에 대해 Linux에서 같은 문제를 알아 냈습니다. 다음과 같이 문제를 해결했습니다 (의사 코드) :

  1. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
    • 소켓을 엽니 다
  2. setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
    • 이 소켓에서 들어오고 나가는 방송을 허용합니다
  3. bind(sock, bindaddr, sizeof(struct sockaddr) ~와 함께

bindaddr.sin_family = AF_INET

bindaddr.sin_port = <YourPort>

bindaddr.sin_addr.s_addr = INADDR_ANY

  • 모든 카드에 들어오는 메시지를 받으십시오 <YourPort>

경고는 필터링이 없다는 것입니다 (3의 경고 참조). 그래서 당신은 모든 메시지를 얻을 것입니다. 전송 된 메시지는 주어진 주소에 대해 단일 캐스트 또는 방송되어 있습니다. sendto().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top