2012-06-09 3 views
0

나는 활동과 원격 서비스로 안드로이드 프로그램을 구현했다. 활동은 AIDL을 사용하여 서비스와 통신하고 상호 작용하지만 동일한 시스템에서 작동하며 IPC 메커니즘을 사용하여 서로 통신합니다. 이제 저는 그것들을 별개의 기계에 놓고 그들 사이를 연결하려고합니다. 연결을 만들기 위해 소켓을 사용하려고하는데 어떻게 할 수 있는지 모르겠습니다. 다른 컴퓨터에서 실행중인 서비스를 시작/중지하고 서비스에 바인딩하려면 어떻게합니까? 소켓이이 케이스를위한 최선의 선택입니까? 아니면 다른 더 나은 솔루션이 있습니까? 이 문제를 처리하려면 Android OS에서 Binder 클래스를 변경해야합니까? 해결책을 찾도록 도와 주시면 감사하겠습니다.다른 컴퓨터에서 활동과 원격 서비스 간의 연결

덕분에, 라

답변

2

어떻게 시작/정지 및 활동에서 다른 컴퓨터에서 실행중인 서비스를 결합 할 수 있습니까?

그렇지 않습니다.

소켓이이 케이스를위한 최상의 선택이거나 다른 더 좋은 해결책이 있습니까?

NAT 제한 등으로 인해 둘 다 동일한 WiFi 라우팅 세그먼트에 있지 않으면 일반적으로 직접 장치 대 장치 통신이 인터넷을 통해 가능하지 않습니다. 이는 직접 PC 대 PC 통신의 문제와 다르지 않습니다. 일반적으로 관련된 방화벽을 제어하지 않는 추가 과제가 있습니다. 대부분의 솔루션은 브로커 또는 프록시 역할을하는 중간 서버를 사용합니다.

처리하려면 Android OS에서 바인더 클래스를 변경해야합니까?

Binder을 사용해야합니다. Binder은 RPC (원격 프로 시저 호출)가 아닌 IPC (프로세스 간 통신)입니다.

+0

감사합니다. http://developer.android.com/reference/android/os/Binder.html 내가 "바인더에서 파생되고 내 자신의 사용자 지정 RPC 프로토콜을 구현할 수있다"고 언급했습니다. –

+0

또한 http://developer.android.com/reference/android/os/IBinder.html android OS 소스 코드에서 바인더 클래스를 확인하여 ontransaction() 메소드에서 소켓을 열고 직렬화 된 obj를 보낼 수 있는지 확인합니다. 안드로이드 OS에서 ontransact()를 수정하고, OS를 컴파일하고, 클라이언트와 서버에서 수정 된 OS를 사용하십시오.)하지만 먼저 서비스를 바인드해야하고, 열 수 있는지 여부를 모릅니다. 소켓이 안드로이드 OS에서 bindservice를 호출하려고 할 때 안드로이드 OS 소스 코드를 변경하거나 그렇지 않으면 ontransact()를 사용하지 않기 때문입니다. –

관련 문제