2010-06-08 4 views
2

기본적으로 내가 달성하고자하는 것은 사용자가 본질적으로 채팅 룸에서 네트워크를 통해 서로 연결할 수있게 해주는 프로그램입니다. 내가 현재 고심하고있는 것은 사용자가 다른 사용자가 사용하고있는 컴퓨터의 IP 주소를 모르거나 서버의 IP 주소를 알지 못해도 서로 연결할 수 있도록 코드를 작성하는 것입니다.파이썬의 네트워크 통신 프로그램

모든 사용자가 내 네트워크의 IP 범위를 검색하여 활성화 된 '방'을 찾은 다음 사용자에게 연결할 기회를 줄 수있는 방법을 알고 있습니까?

또한 중앙 서버에서 실행할 필요가 없으므로 모든 사용자가 다른 모든 사용자 (기본적으로 서버와 클라이언트)에 동시에 연결됩니다.

답변

6

두 가지 제안을 드릴 수 있습니다. 우선, 네트워크의 브로드 캐스트 주소에 대한 UDP 패킷이 모든 사람에게 수신됩니다. 둘째, 로컬 네트워크에서 서로를 찾는 특정 서비스를 제공하는 프로그램에 대한 프로토콜이 있습니다. 이 프로토콜은 mDNS ZeroConf 또는 Bonjour라고합니다.

브로드 캐스트 UDP를 사용하면 빠른 경로가 될 수 있습니다. 하지만 내가 너라면, 대신 ZeroConf를 사용하는 법을 배울 것이다. IPv6에서 잘 지원되며 이미 SubEthaEditGobby과 같은 흥미로운 프로그램에서 사용됩니다.

여기에 nice tutorial for implementing something that speaks ZeroConf in Python에 대한 링크가 있습니다.

또 다른 권장 사항 ... 자신의 브로드 캐스트/멀티 캐스트 UDP 코드를 손에 넣기를 원한다면, 현재있는 모든 시스템이 2003 년 이후의 새로운 Linux를 실행하고 있는지, 모든 Windows 시스템이 XP 이상이면 IPv6을 사용하지 않을 수 있습니다. IPv6 링크 - 로컬 (동일한 LAN으로 생각) 모든 호스트 멀티 캐스트 주소는 ff02 :: 1입니다. 그렇게 간단하고 쉽고 동일한 LAN에있는 다른 모든 시스템에 연결할 수 있습니다. IPv4의 브로드 캐스트 주소가 IPv4인지 확인하는 것보다 훨씬 낫습니다.

+0

자습서에 링크 된 sourceforge pyzeroconf 아카이브가 버그가있어 버려진 것처럼 보이지만 여기에 최근에 작업 한 것이 있습니다. https://launchpad.net/pyzeroconf 또한 프로토콜은 요즘 거의 모든 Mac, Linux 박스 및 주요 밴드 네트워크 프린터에 내장되어 있습니다. –

+0

매우 빠른 응답을 보내 주셔서 감사합니다.이 응용 프로그램을 네트워크로 다른 사용자에게 전송하는 것이 좋습니다. 이것이 ZeroConf를 사용하는 프로그램과 쉽게 통합 될 수 있는지 알고 있습니까? – user360968

+0

ZeroConf는 순전히 서비스 광고 및 위치 파악 메커니즘입니다. 프로그램의 인스턴스가 서로의 IP/포트 번호를 찾을 수 있도록 허용하지 않고 응용 프로그램과 완전히 독립적입니다. 또한 Windows (Mac/Linux처럼 내장되어 있지 않음)에서 잘 지원되지 않으므로 해당 플랫폼을 타겟팅하는 경우 브로드 캐스트 UDP를 직접 사용하는 것이 좋습니다 (ZeroConf도이 표준을 사용하지만 표준입니다. 사용자 친화적) – Rakis

관련 문제