2014-11-25 4 views
0

내가 이렇게 내 UDP 소켓을 바인딩 할 경우Qt udp 소켓, 소켓의 readyRead 신호는 무엇입니까?

connectState = socket->bind(QHostAddress::Any, 14550); 

후 나의 이해는 UDP를 사용하여 뭔가를 쓰는 경우 포트 14550 내 LAN에있는 모든 장치가 readyRead 신호를 트리거 것입니다.

맞습니까? 일부 장치가 prot 12345에 있으면 readyRead 신호가 트리거되지 않습니다. 특정 주소 범위에만 바인딩 할 수 있습니까?

답변

1

는 잘 모르겠어요하지만 난 당신이 방송과 AnyAddress을 섞어 느낌이있다

다음

나의 이해 뭔가를 쓰는 경우 포트 14550 내 LAN에있는 모든 장치가 readyRead 신호를 트리거 것입니다 UDP를 UDP를 사용하여.

아니오 도달 할 수있는 서버의 주소에서 UDP 패킷을 보낼 때 readyRead를 트리거합니다. UDP 패키지는 컴퓨터로 보내야합니다. 이 경우 ::Any은 가상 127.0.0.1이라도 모든 인터페이스를 의미합니다.

UDP 패키지를 선택한 포트로 보내야합니다.

그리고 특정 주소 범위에만 바인딩 할 수 있습니까?

지금까지 내가 아는 한. 내가 알고있는 모든 OS에서 ::Any은 0.0.0.0으로 변환됩니다. 이는 OS에 "사용 가능한 인터페이스에서 수신 대기"라고 말하는 특수 주소입니다. 일부를 제외하려면 관심있는 IP 목록을 결정하고 컬렉션을 작성해야합니다 들을 수있는 QUdpSocket.

+0

내 PC의 주소가 192.168.1.10이라면 udp 패킷의 주소를 보내는 장치는 192.168.1.20이고 내 PC에서는 socket-> bind (QHostAddress :: Any, 14550)를 호출합니다. 내 PC가 패킷을 수신하고 readRead 신호를 트리거 할 수 있습니까? 아니면 내 장치가 패킷을 보낼 주소가 무엇입니까? – Nyaruko

+1

장치가 명시 적으로 패킷을 192.168.1.10에 보내야합니다. 그렇지 않으면 PC에 연결되지 않습니다. 방송국 주소는 당신이 생각하는 것입니다. 특별 브로드 캐스트 주소로 청취하는 경우 모든 장치에서 브로드 캐스트로 전송하는 UDP 패킷을 받게됩니다. 그러나 해당 주소로 수신하는 다른 모든 PC는 동일한 패키지 (따라서 이름)를 받게됩니다. Punchline : 장치가 대상 주소를 알아야합니다. 이유는 무엇입니까? 라우터 또는 DSL 모뎀은 종종 브로드 캐스트 주소를 통해 구성됩니다. 설치 소프트웨어가 브로드 캐스트를 청취하고 장치가이 패키지를 보냅니다. – Oncaphillis