使用 Telnet 连接到 Android 上的 Socket 服务器

Posted

技术标签:

【中文标题】使用 Telnet 连接到 Android 上的 Socket 服务器【英文标题】:Connecting to Socket server on Android using Telnet 【发布时间】: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 仿真器。这是我在放弃之前所获得的,因为这在物理设备上不是问题。 【参考方案1】:

无法从127.0.0.1 上的主机访问模拟器,但它是10.0.2.2

...否则您将连接到本地环回,而不是虚拟接口。

【讨论】:

以上是关于使用 Telnet 连接到 Android 上的 Socket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过网页连接到 telnet

如何使用 netcat/socat/telnet 手动连接到 websocket?

PHP 连接到 Telnet 服务器

使用房间连接到 Android 上的数据库

netstat 说 443 已打开,但我无法使用 telnet 连接到它.. 为啥?

无法从 Node.js 连接到 Telnet 服务器