转载 http://bbs.it-home.org/thread-44001-1-2.html
一 、问题描述
首先我是在本地tomcat服务器上部署一个web项目,通过web项目的servlet完成对客户端连接请求的操作。其他都很顺利,在电脑浏览器上输入URL访问正常,在eclipse上创建Java项目也能正常访问。但是一旦放在android项目中,就出现错误了,抛出异常信息为:failed to connect to localhost/127.0.0.1 (port 80) after 90000ms: isConnected failed: ECONNREFUSED ,由于经验欠缺不能一下看出错误所在。我就笨笨的通过Log语句一句一句的测试,好在通过不断摸把错误定位到【int code = connection.getResponseCode();】这句话上,每当执行到该处时就会抛出异常。搜索了一下【为何使用getResponseCode()方法会抛出异常?】,基本上大部分答案都指向【android网络连接不能在主线程上进行,需要另启线程】这一知识点上。开了多线程以后,问题依旧。
二、解决办法
经过不断地摸索尝试,就在刚才终于测试成功了。原来问题出在我的URL上。我们在本地配置tomcat服务器时,有三种访问方式都可以通过浏览器连接到服务器上,下面我就以我本地服务器为例给出三种形式的URL:
1. http://127.0.0.1:8088/jsonProject/images/picture.png
2. http://localhost:8088/jsonProject/images/picture.png
3. http://192.168.0.100/jsonProject/images/picture.png(IP地址略有改动)
以上三种URL在联网时都可以通过浏览器访问到picture.png这张图片。仔细观察不难发现,不同之处在于红色字体的部分,第1和第2个URL是本地访问方式,也就是说前两种访问方式不需要通过网络。第三种URL需要联网才能正常访问,也就是说只要你的服务器开着,任何人都可以通过网络使用该URL访问到picture.png这一资源。使用真机测试时,你的真机也就相当于脱离于你的pc之外的另外一设备,所以说当你需要连接到服务器时只能使用第三种URL方式。即你需要使用你的真实IP地址。(真实ip地址查看方式:在命令行窗口输入:ipconfig即可查看你的IPv4地址)。
三、其他
由于知识面较为狭窄,服务器方面更是刚刚接触,所以有许多描述可能不是太为准确或者贴切。希望大家发现该篇文章有不妥的地方能够提出,我会虚心受教,共同学习。