2012-03-19 2 views
5

나는 사용자가 bonjour 프로토콜을 사용하여 서로 메시지를 보낼 수있는 iPhone/iPad 앱을 구현 중입니다. 기본적으로 서버는 봉주르를 통해 자신의 서비스를 게시하고 동일한 무선 랜에 연결된 클라이언트는 자신의 서비스를 발견하고 메시지에 연결하여 메시지를 보낼 수 있습니다. 내가 발견 한 문제는 일부 라우터가 Bonjour에 문제가있는 것 같습니다. 집에서 또는 다른 장소에서 내 앱을 실행할 때 완벽하게 작동합니다. Bonjour 서비스의 게시 및 검색은 완벽하게 작동합니다. 그러나 내 친구 아파트 중 하나에서 앱을 사용해 보았을 때 일부 고객 (전부는 아님)이 게시 된 봉쥬르 서비스를 찾을 수 없었습니다. Bonjour를 사용하는 다른 응용 프로그램 (예 : Apple의 Remote 응용 프로그램)도 해당 네트워크에 문제가 있음을 알았습니다. 일부 파기를 한 후에 나는 다른 사람들이 bonjour 및 일부 라우터와 비슷한 문제점을 가지고 있음을 발견했습니다. 그러므로 나는 2 개의 질문이 있습니다 :iPhone 피어 투 피어에 대해 Bonjour 프로토콜을 사용하는 대신

1) 일부 라우터가 가지고있는 것 같은 Bonjour와의이 문제가 널리 퍼진 문제인지 아는 사람 있습니까? 다시 말해서, 내 응용 프로그램이 Bonjour를 사용하여 전혀 작동하지 않는다면 WLAN 네트워크의 50 %에서 작동하지 않거나 대부분의 라우터에서 봉주르와 관련하여 문제가 없는지 걱정해야합니다. 분명히 나는 ​​모든 라우터가 bonjour 패킷을 처리하는 방법을 알기를 기대할 수는 없지만 올바른 방향으로 나를 가리킬 수있는 Networking 전문가가있을 수 있습니다.

2) 두 번째로, bonjour가 내 앱을 빌드하기에 너무 위험한 프로토콜이라면 비슷한 기능을 가진 대안은 무엇입니까? 필자가 선호하는 기능은 사용자가 수동으로 다른 전화기의 IP 주소를 입력하지 않고도 서비스를 게시하고 검색하는 것입니다.

도움 주셔서 감사합니다. 이 질문은 광범위한 질문이지만 모든 도움을 주시면 감사하겠습니다. :)

+0

라우터가 클라이언트와 클라이언트 간의 통신을 가능하게하는 설정을 가지고 있는지 확인할 수 있습니까? 일부 WLAN 라우터는 클라이언트를 서로 "분리"합니다. 이것이 얼마나 광범위합니까?이 기능을 갖춘 라우터가 꽤 있습니다. 클라이언트 격리가 적용되면 다른 서비스 검색 프로토콜이 두 클라이언트간에 직접 작동하지 않습니다. – ldx

+0

안녕하세요. 팁 고마워! 나는 그것을 조사해야 할 것이다. 문제는 친구의 라우터에서 발생했기 때문에 나는 그녀의 자리에서 체크 아웃해야 할 것입니다. –

답변

3

이것은 잠재적으로 어려운 균열입니다. 장치가 특정 네트워크에서 서로를 찾지 못하게하는 문제는 기본 전송 (즉, 멀티 캐스트 UDP)과 관련이 있으며 Bonjour (또는 mDNS 또는 기타 원하는 모든 것)와는 관련이 없습니다.

높은 수준의 엄밀하지 않은 용어에서 멀티 캐스트 데이터는 라우터에 더 많은 부하를가합니다. 대기업 및 대학 네트워크는 때때로 Bonjour 메시지 (예 : UDP 패킷을 멀티 캐스트 그룹 224.0.0.251 포트 5353으로 전송)를 떨어 뜨리는 것을 선호합니다. 이는 네트워크가 수천 명의 클라이언트가 자신의 iTunes 라이브러리를 광고하는 등 침해 당하지 않았기 때문에 가능할 수 있습니다. 일반적인 성과를 향상시킵니다. 스펙트럼의 다른 쪽 끝에있는 일부 국내 라우터는 제조사 만이 알 수있는 이유로 멀티 캐스트 패킷을 꺼내 버립니다. 두 가지 상황 모두에 대해 할 수있는 일은별로 없습니다.

네트워크에서 tcpdump을 실행하여 패킷이 실제로 전달되는지 확인하십시오. 나는 잠시 동안 전달하지 않는 홈 라우터를 발견하지 못했다. 그렇지 않다면 중앙의 인터넷 검색 기능을 사용해야합니다. 표시되는 경우 구현시 문제가 발생합니다.

서비스 발견을위한 더 간단한 프로토콜을 멀티 캐스트를 통해 전송하는 것을 막을 수있는 방법은 없습니다. 단지 여러 언어로 된 많은 Bonjour 클라이언트가 이미 작성되고 테스트 된 것입니다.