【发布时间】:2019-05-16 06:28:34
【问题描述】:
我在模拟器中的 Android 应用程序上运行了一个 ServerSocket。我想从我的主机(MacBook)向它发送消息。
完全按照 How to connect to an Android server socket in the emulator 的说明,我的步骤是:
-
在 Android 应用中启动一个新线程。在此线程中,使用 ServerSocket 监听 8080 端口和本地的传入请求 IP 地址。
InetAddress addr = InetAddress.getByName(< ipaddress >); serverSocket = new ServerSocket(8080, 0, addr); clientSocket = serverSocket.accept(); -
使用 ADB 将网络流量从端口 5050 的主机重定向到 8080。
telnet localhost 5554 redir add tcp:5050:8080 -
使用 Telnet 向主机的 5050 端口发送消息。该消息预计将重定向到模拟器上的 8080 端口。相反,我收到一条连接关闭消息。
telnet -d localhost 5050 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
知道为什么连接会立即关闭吗?如何将消息发送到服务器?
【问题讨论】:
-
我遵循相同的说明并遇到了相同的问题。看起来在 2012 年发布到 2018 年这个问题之间的某个时间,模拟器停止允许传入连接。缺少描述性错误消息或更新 documentation 使其看起来像是一个错误或我们做错了什么。
-
This 可能会有所帮助。我无法让它满足我的需求(用于不支持 x86 的项目的 ARM 仿真器)并且 telnet 测试不起作用,但我能够通过 ping 进入 x86_64 仿真器。这是我在放弃之前所获得的,因为这在物理设备上不是问题。