【问题标题】: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 类来处理这个问题?

    您不需要使用BinderBinder 是 IPC(进程间通信),而不是 RPC(远程过程调用)。

    【讨论】:

    • Thanks.in developer.android.com/reference/android/os/Binder.html 提到我可以“从 Binder 派生并实现我自己的自定义 RPC 协议”。
    • 我还检查了developer.android.com/reference/android/os/IBinder.html 和android OS 源代码中的binder 类,看看是否可以在ontransaction() 方法中打开套接字并通过它发送序列化的obj(修改ontransact()在android操作系统中,编译操作系统,在客户端和服务器上使用修改后的操作系统)。但在此之前我需要先绑定服务并且不知道当它试图在android中调用bindservice时是否可以打开套接字os通过更改android os源代码或不更改,因为在这种情况下它没有使用ontransact()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2021-04-17
    • 2020-10-02
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多