QT와 함께 멀티 캐스트 그룹에 대한 UDP 소켓을 어떻게 열 수 있습니까?
-
19-09-2019 - |
문제
QT 및 네트워크 소켓에 대한 질문이 있습니다. 다른 네트워크에 여러 개의 IP 애호가가있는 컴퓨터가있는 경우 특정 네트워크 어두운 곳/IP address에서 멀티 캐스트 그룹에 대한 UDP 소켓을 어떻게 열 수 있습니까?
EG : IP 192.168.2.1
그리고 172.20.0.1
그리고 멀티 캐스트 그룹에서 패킷을 수신하는 소켓을 만들고 싶습니다. 228.5.6.7
에 172.20.0.1
네트워크 어댑터.
해결책
당신은 그것을 설정해야합니다 imr_interface
아래와 같이 : (아마도 INADDR_ANY
지금)
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("228.5.6.7");
mreq.imr_interface.s_addr = inet_addr("172.20.0.1");// <---- right here
...
QSocketDevice* sdev = new QSocketDevice(QSocketDevice::Datagram);
...
setsockopt(sdev->socket(), IPPROTO_IP, IP_ADD_MEMBERSHIP,(const char *)&mreq, sizeof(struct ip_mreq));
...
다른 팁
청취 소켓 인 경우 Bind to IP 주소를 사용하여 특정 IP 주소에 바인딩 할 수 있습니다. 클라이언트 소켓 인 경우 OS는 라우팅 테이블 규칙에 따라 해당 IP 주소에 도달하기 위해 올바른 인터페이스를 관리하기 위해 올바른 인터페이스를 관리합니다.
제휴하지 않습니다 StackOverflow