【问题标题】:Connection between Activity and remote service on different machine不同机器上的Activity和远程服务之间的连接
【发布时间】:2012-06-09 13:18:24
【问题描述】:
我已经实现了一个带有活动和远程服务的 android 程序。 Activity 使用 AIDL 与服务进行通信和交互,但在同一台机器上,并且知道它们使用 IPC 机制相互通信。现在,我想将它们放在不同的机器上并在它们之间建立连接。我正在尝试使用套接字建立连接,但我不知道该怎么做。如何启动/停止和绑定与活动在不同机器上运行的服务?插座是这种情况下的最佳选择还是有其他更好的解决方案?我是否需要更改 Android 操作系统上的 Binder 类来处理这个问题?如果您能帮助我找到解决方案,我将不胜感激。
谢谢,
拉
【问题讨论】:
标签:
android
sockets
service
android-activity
aidl
【解决方案1】:
如何启动/停止和绑定与活动在不同机器上运行的服务?
你没有。
插座是本案例的最佳选择还是有其他更好的解决方案?
由于 NAT 限制等原因,通常无法通过 Internet 进行直接的设备到设备通信,除非它们都在同一个 WiFi 路由段上。这与直接 PC 到 PC 通信的问题没有什么不同,增加的挑战是您通常无法控制所涉及的防火墙。大多数解决方案都涉及在中间使用服务器,充当代理或代理。
我是否需要更改 Android 操作系统上的 Binder 类来处理这个问题?
您不需要使用Binder。 Binder 是 IPC(进程间通信),而不是 RPC(远程过程调用)。
【讨论】:
-
-
我还检查了developer.android.com/reference/android/os/IBinder.html 和android OS 源代码中的binder 类,看看是否可以在ontransaction() 方法中打开套接字并通过它发送序列化的obj(修改ontransact()在android操作系统中,编译操作系统,在客户端和服务器上使用修改后的操作系统)。但在此之前我需要先绑定服务并且不知道当它试图在android中调用bindservice时是否可以打开套接字os通过更改android os源代码或不更改,因为在这种情况下它没有使用ontransact()。