【问题标题】:Cannot connect to my HTTP server running on my Android phone无法连接到我的 Android 手机上运行的 HTTP 服务器
【发布时间】:2012-02-08 06:38:45
【问题描述】:

我正在尝试运行嵌入在我的 Android 应用程序中的小型自定义 HTTP 服务器(以帮助调试应用程序)。但是,当服务器在我的 Android 2.3.4 手机上运行时,我无法从桌面 Web 浏览器可靠地连接到 HTTP 服务器。

我知道 HTTP 服务器代码可以正常工作(至少是基础代码),因为有一次连接正常。并且代码在我的桌面上运行时可以可靠地运行(我的应用程序是基于 libgdx 的纯 Java 应用程序,可以为 Windows 或 Android 构建)。

我的 Android 权限是正确的,因为在添加 android:name="android.permission.INTERNET" 权限之前,我遇到了 PermissionDenied 错误(设置套接字侦听器时)。服务器端代码在自己的线程中运行,归结为:

ServerSocket ss = new ServerSocket(serverPort);
Socket clientSocket = ss.accept();

我使用的是 8080 端口。(我尝试了 80 端口,但使用了 Linux 的must-be-root-below-port-1024“功能”)。

LogCat 输出看起来不错。我的应用程序只是打印其“在端口 8080 上侦听”消息,似乎没有抛出异常。

网络连接似乎很好(通过手机浏览互联网工作正常,我可以从桌面上ping 手机)。我用的是 WiFi,不是 3G。

【问题讨论】:

  • 您从浏览器得到什么错误?您可以连接其他程序吗,例如远程登录?它会给出同样的错误吗?
  • @JoachimPileborg Web 浏览器给出“无法连接:Firefox 无法与位于 192.168.69.113:8080 的服务器建立连接”。同样,“telnet 8080 192.168.69.113”表示“无法连接到远程主机:连接被拒绝”

标签: java android network-programming


【解决方案1】:

我想我找到了。我错过了一个电话:

ss.setReuseAddress(true);

在创建服务器套接字之后。这意味着应用程序的每次重新启动(也暂停/恢复)都(默默地?)未能创建服务器套接字,因为套接字被标记为“正在使用”一段时间。这就解释了为什么它如此不可靠(只有第一次运行,或者在足够长的等待后运行才会起作用......)

我通过查看链接到 this blog entry 的代码找到了它。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多