【问题标题】:Connecting to tcp server from client running in android device从在 android 设备中运行的客户端连接到 tcp 服务器
【发布时间】:2010-02-24 09:01:46
【问题描述】:

我正在尝试从 android 设备中的 tcp 客户端应用程序连接到独立桌面 tcp 服务器(java)。

但我无法连接到那个。

我尝试编写一个桌面 tcp 客户端并尝试连接到服务器(远程服务器)。它工作正常。

但是当我尝试从 android 连接时,我在创建 Socket 实例时遇到了 IOException。

任何人都可以帮助我吗?提前谢谢....

【问题讨论】:

    标签: android networking network-programming


    【解决方案1】:

    我正在回答我自己的问题:)

    现在,我可以从运行在 Android 设备中的客户端连接到运行在我的 PC 中的服务器。

    问题是,

    我在 PC 上运行的服务器连接到与我的手机使用的 Wi-Fi N/W 不同的 IP N/W。因此,即使我在客户端提供相同的 IP 地址以连接到服务器,它也无法连接,因为 IP 地址与 IP N/W 是相对的(本地)。

    所以,如果我们为服务器使用相对 IP,我们需要确保服务器和客户端运行的设备应该通过相同的 IP N/W 连接。

    这是一个愚蠢的问题,愚蠢的错误和愚蠢的答案。 :)

    【讨论】:

    • 大家好,我需要知道一件事。我需要继续检查 Socket 的健康状况(它是否存在)。为此,我继续将 1 个字节的数据写入服务器的外流。有了这个,我可以监控连接。但是我把它保持在无限循环中,因为我需要永远检查它。它正在消耗更多的 CPU 周期。取而代之的是有什么方法可以检查连接状态吗?提前谢谢..
    【解决方案2】:

    好的...目前我们正在通过每n 秒检查一次连接来执行此操作。

    Timer.scheduleAtFixedRate( new TimerTask() {
    public void run() {
    .....
    }
    }
    

    但是,我仍然想知道是否有任何方法可以在套接字连接丢失时获得回调......

    【讨论】:

    • 您应该自己进行回调。 socket.getInputStream().read() 将在套接字关闭时返回 -1,因此当您的“读取线程”遇到这种情况时,您可以调用自己的回调。但是,是的,我希望有时也内置这样的回调:)。
    • 嗨,感谢您的评论,问题是在空闲模式下,如果我想检查套接字状态,我不能使用 socket.getInputStream.read() 从服务器读取,因为它可能不会发送任何内容到在空闲模式。所以,我正在使用 socket.getOutputStream().write() 进行写入,同时我可以检查套接字状态。但是仍然使用这种方法,我在 N/W 上产生了不必要的流量,并且我的应用程序消耗了更多的 CPU。我见过一个 API socket.isConnected(),但不幸的是,当我关闭服务器端的套接字连接时,它给出了正确的结果。如果您遇到任何解决方案,请告诉我。谢谢
    猜你喜欢
    • 2021-06-21
    • 2021-06-22
    • 2016-09-27
    • 2021-08-12
    • 2022-01-16
    • 2019-06-06
    • 2019-06-18
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多