本文算是对处理自己在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
在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