【问题标题】:How to connect to web service running on Android device from a another computer on the same LAN?如何从同一 LAN 上的另一台计算机连接到 Android 设备上运行的 Web 服务?
【发布时间】:2015-01-30 23:31:20
【问题描述】:

基本上我的开发机器和我的手机在同一个 (WiFi) 网络上,我需要能够从我的 PC 发送和接收 JSON 到设备上本地主机上运行的服务(我正在开发一个移动应用程序有一个在本地作为服务运行的组件)。我查看了来自 Chrome 的端口转发,但无法使其正常工作。有人让这个在 Mac 上工作吗?

【问题讨论】:

  • 如果要进行端口转发,请使用 ADB 或 SSH。如果你想运行一个普通的服务器,在所有接口或wifi上运行它,而不是“localhost”所指的环回接口。
  • 我无法控制组件监听的接口/端口,因为它来自第三方。在特定端口号上侦听 localhost 是硬编码的。
  • 这不是真的。如果是您的应用程序,即使在已编译的库中,也可以轻松更改这些细节。

标签: android rest service portforwarding


【解决方案1】:

如果您的开发机器和您的手机在您的 wifi 网络的同一子网中,您应该能够使用静态 IP 进行测试。不需要端口转发(除非您使用 WAN IP 或设置 DNS 服务,否则不会有帮助)。

基本上,例如,如果您的服务器的本地 IP 为 192.168.1.17,则将其用作 Android 应用程序的端点。如果反过来工作,有一些 IP 工具应用程序可以帮助您获取 android 设备的 IP。

【讨论】:

  • 如前所述,该服务在 localhost (127.0.0.1) 上运行,因此无法直接从外部 IP 连接。
【解决方案2】:

如果你只是在开发的时候需要连接,直接用你手机的ip设置socket就很方便了。

发送脚本

import socket

HOST = ''    # device ip
PORT = ''    # your service's listening port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
with open("data.json", "rb") as f:
    data = f.read()
    s.send(data)
    s.close()

接收也差不多。

【讨论】:

    【解决方案3】:

    设法解决了这个问题:

    • 在我的桌面计算机上使用“adb forward tcp:LOCALPORT tcp:REMOTEPORT”将服务正在侦听的端口 (REMOTEPORT) 转发到我桌面上的本地端口 (LOCALPORT)

    • 我试图与之交谈的服务需要额外的身份验证标头,我在使用 curl 进行测试时没有添加这些标头。我使用“adb logcat”检索了 auth 标头所需的密钥(因为我的应用程序在启动时将其写入控制台)。为了向每个请求添加身份验证标头,我使用 Chrome 扩展程序 (Postman) 来制作自动添加身份验证标头的请求。

    • 我现在可以在我的桌面上使用 Chrome 中的 Postman 将请求 POST 到 localhost:LOCALPORT,并将响应视为 JSON。

    仅供参考,我在设备上使用 Couchbase Lite,并试图弄清楚如何与其交谈以运行数据库查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多