Android App通过OkHttp访问本地PC的Apache服务器时抛SocketTimeoutException的一种原因

本文算是对处理自己在coding过程中遇到问题过程的总结,参考了很多网上的博客,最终原因也是从一位大神处得到。

东西和内容肯定不新,写下来一是加深自己的印象,二是希望更多遇到一样问题的小伙伴及时找到原因


问题出现时的预置情况:

1,本地PC安装了Apache服务器

具体服务器的安装参照网上的各种博客。

2,安装好Apache后,到安装目录下,打开conf/httpd.conf

2.1 重置安装路径,参考一下:

Define SRVROOT "D:\httpd-2.4.33-o102o-x64-vc14-r2\Apache24"

ServerRoot "${SRVROOT}"

2.2 重置服务器的端口号。参考以下:

#Listen 12.34.56.78:80

Listen 8080

端口号默认是 80

如果使用默认,在访问服务器时网址直接使用当前pc的IP地址即可:例如:http://12.34.56.78

如果修改了端口号,在 Android app 代码中访问该Apache服务器时,须在 IP 地址后+端口号,http://12.34.56.78:8089

否则访问失败

2.3 配置Apache服务器对外资源文件的目录

上述 conf/httpd.conf 文件中还可以修改 Apache 服务器对外提供资源文件的放置目录,默认是

DocumentRoot "${SRVROOT}/htdocs"

可修改该配置,把 htdocs 目录换掉,这个就看个人喜好了吧

3 抛SocketTimeoutException

PC 端打开 Apache 服务器,使其正常工作

在Android app的code中使用HttpURLConnection 或者 Okhttp 访问该Apache服务器下的资源时,抛SocketTimeoutException


请出问题的一种原因:防火墙

网上很多分析是说有可能是 app 的 code 中网址的IP地址写错了,应该用 PC 实时的IP地址

但是我用的就是 ipconfig 指令在 cmd 窗口中查到的IP地址,依然抛 SocketTimeoutException

如果在确认Apatch正常工作前提下,IP 地址也使用正确(可通过到浏览器中输入ip地址+端口号的方式验证,看是否能显示 htdocs 目录下 index.html 网页,能就表示 Apache 正常工作中),请考虑关闭 PC 系统自带的防火墙

另外,如果 PC 连接的是公司的内网,内网的网关配置防火墙,也有可能 SocketTimeoutException。

pc 连家里的 wifi,然后 IP 用无限 wifi 对应的 IP,基本上都可以解决 SocketTimeoutException


猜你喜欢

转载自blog.csdn.net/ding3106/article/details/81034675