2011-05-03 4 views
2

QtSDK에서 네트워크 브로드 캐스팅에 대한 간단한 예가 있습니다. 방송 정보를 보내고받는 것은 쉽습니다. 그리고 수신자 측에서는 방금 수신 한 브로드 캐스트 패킷을 알고 싶습니다. 나는 readyRead 신호 콜백 함수에서 QUdpSocket.peerName()을 시도하지만 빈 문자열을 얻는다. 어떤 단서? 워드 프로세서Qt 네트워크 방송 질문 : 발신자 IP를 얻으려면

+0

언제든지 해결책을 찾았습니다 – Xsmael

답변

0

:

은 connectToHost (에 의해 지정된) 피어의 이름을 돌려 connectToHost 경우 빈 QString()가 호출되지 않았습니다.

따라서 connectToHost()을 호출하면 결과가 나타납니다. peerAddress()으로 시도해 볼 수도 있습니다. 항상 이름을 통해 연결하는 경우가 아니면 역순으로 조회하고 이름을 얻을 수 있다고 기대하지는 않습니다.

+0

readyRead 신호 슬롯에서 connectToHost()를 호출해야합니까? – catinred

2

QUdpSocket::readDatagram()으로 패킷을 읽을 때 보낸 사람의 IP 주소를 검색 할 수 있습니다. 당신은 주소를 저장하는 QHostAddress에) (readDatagram에 대한 포인터를 전달해야 당신이 QHostAddress의 설명서를 참조해야하는 경우

QHostAddress senderAddress; 
yourSocket->readDatagram(&data, size, &senderAddress); 
// senderAddress now represents the sender address 

당신은 senderAddress에서 QString 또는 정수로 주소를 얻을 수 있습니다.

호스트 이름을 사용하려면 QHostInfo을 사용하여 역방향 조회를 수행 할 수 있지만 이름을 가져올 수는 없습니다.

+0

socket-> readDatagram 후에 QString ip = socket-> peerAddress(). toString(); 빈 문자열이 나옵니다. – catinred

+0

@cantinred 편집 됨. readDatagram()에 주소를 저장할 QHostAddress에 대한 포인터를 전달해야합니다. – Leiaz

+0

@Leiaz 작동하지 않습니다. 브로드 캐스트 패킷을받을 때받는 주소 (senderAddress)는 0.0.0.0입니다. 나는 그것이 역시 동작 할 것이라고 생각했지만, Qt가 무언가 어리석은 짓을하거나 리눅스의 기본 소켓 구현은 수신 된 브로드 캐스트 패킷을위한 빈 소스 주소를 제공한다. – doug65536

관련 문제