2012-09-20 2 views
1

중앙 서버가 두 장치를 연결하는 방법을 알고 싶습니다. 장치 응용 프로그램이 시작될 때 IP 주소 및 기타 관련 정보 (사용자 이름)를 서버에 등록해야한다고 가정합니다. 다른 장치에 연결하려면 서버에있는 다른 장치의 주소를 찾는 것이 좋습니다. 아마도 요청을 받아야합니다. 그런 다음 a를 소켓에 연결하도록 설정하십시오. 장치 응용 프로그램이 닫히면 서버에서 등록을 취소해야합니다. 이 올바른지?두 대의 안드로이드 장치를 중앙 서버에 연결하려면 어떻게해야합니까?

답변

1

꽤 정확합니다.

하나 또는 두 개의 장치가 방화벽 (NAT 포함) 뒤에있을 수 있으므로 실제로 서로 직접 연결할 수 없다고 가정해야하므로 해당 장치를 다른 장치와 직접 연결하는 것처럼 간단하지 않습니다. 등록 된 주소를 찾으면 다른 장치로 방화벽 통과 기술 (일반적으로 UDP로는 성공하지만 TCP로는 성공하지 못합니다)이나 방화벽 뒤에 있지 않은 도우미 (등록 서버 또는 다른 것과 같을 수 있음)를 모두 가지고 있어야합니다 통신하려는 장치 간의 데이터.

또한 등록 서버 시간 초과 등록이 필요할 수 있으며 클라이언트는 네트워크에 대한 액세스가 끊어 지거나 네트워크에 대한 액세스 권한을 잃을 때마다 서버에서 등록을 취소 할 기회가 항상 없기 때문에 클라이언트가 정기적으로 등록을 새로 고칩니다.

+0

내가 설명했던 것을 수행했다고 가정하면, 다른 장치와 통신되는 내용이 중앙 서버를 앞으로 어떻게 전달할 수 있습니까? 예를 들어, 장치 1은 장치 2의 IP를 중앙 서버에서 가져 와서 소켓을 통해 연결하고 tcp 비디오, 오디오, 파일 등을이 장치로 스트리밍합니다. 서버를 중개자로 사용하는 경우 새로운 예를 들어 비디오 프레임을 폴링해야하는 빈도는 얼마나됩니까? –

+1

엔드 포인트 간의 직접 통신이 사용되지 않으면 서버는 하나의 클라이언트에게 순진하게'write()'하거나 모든 트래픽을'read()'로 또는 그 반대로 전달할 수 있습니다. 스트리밍 속도를 제어하는 ​​방법에 대한 두 번째 질문은 프로토콜 및 TCP 또는 UDP 사용 여부에 따라 다릅니다. 스트리밍 속도보다 라이브 콘텐츠 인 경우 많이 미리 결정됩니다. TCP를 사용하는 경우 TCP가 흐름 제어를 수행합니다. 라이브가 아닌 콘텐츠에 UDP를 사용하고 있다면 스스로 해결해야하며 어려운 방법으로 흐름 제어 메커니즘을 구현해야합니다. – Celada

관련 문제