android连接服务器时,报:java.net.ConnectException: localhost/127.0.0.1:8080

本文记录了作者在实现Android MP3项目过程中遇到的服务器访问难题及解决过程。问题在于模拟器将127.0.0.1识别为自身地址导致连接失败,通过更改访问地址为10.0.2.2成功解决问题。

最近两天学习android Mp3项目练习,mars老师讲的过程中都一切顺利,没有什么问题,但是我的机器上老是运行不出来,昨天晚上我调试很久,程序没有问题,后来发现我的tomcat服务器访问不了,才让我想起来,之前自己在机器上安装过一个php开发包,里面封装着mysql和apache,可能是端口的问题,于是我把php里面的服务都取消,tomcat可以访问了,但是还是一直从服务器上无法读取文件信息。绞尽脑汁也想不出来个所以然来,测试程序总是在:

    URL url=new URL("http://localhost:8080/mp3/resources.xml");
    System.out.println("SSSSSSSSSSSSSSSSSSSSS22");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    System.out.println("SSSSSSSSSSSSSSSSSSSSS11");
    InputStreamReader isr=new InputStreamReader(conn.getInputStream(),"UTF-8");
    System.out.println("SSSSSSSSSSSSSSSSSSSSS33"); 
    BufferedReader br = new BufferedReader(isr);
    System.out.println("SSSSSSSSSSSSSSSSSSSSS"+br.toString());

红色字体部分停止,就是查不出原因,自己想想也许是自己机器上的问题,于是我换了一台机器运行,结果依然如是,我几乎愁坏了,因为从logcat里面也没看出来所以然来,再我无计可施时,我休息一上午,自己想想既然有问题肯定会从logcat上表现出来,于是又从logcat下手,因为之前我一直Logcat里查原因,还有就是自己写过滤器,后来无意中点击几下下图的按钮:,在W(warming)警告里面有一句“java.net.ConnectException: localhost/127.0.0.1:8080 -Connection refused”,才找到这个问题的根结所在,原来

原来模拟器默认把127.0.0.1和localhost当做本身了
在模拟器上可以用10.0.2.2代替127.0.0.1和localhost
另外如果是在局域网环境可以用 192.168.0.x或者192.168.1.x(根据具体配置)连接本机。

至此,问题解决,顿时都想泪奔;同时提醒大家,在使用套接字时,别忘了在androidManifest.xml中添加权限,否则无法完成访问。

<uses-permission android:name="android.permission.INTERNET"/>

Exception in thread "main" java.net.ConnectException: Call From LAPTOP-UDM5NOLC/10.111.125.69 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:831) at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:755) at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1549) at org.apache.hadoop.ipc.Client.call(Client.java:1491) at org.apache.hadoop.ipc.Client.call(Client.java:1388) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:233) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:118) at com.sun.proxy.$Proxy9.create(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:366) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:422) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:165) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:157) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359) at com.sun.proxy.$Proxy10.create(Unknown Source) at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:276) at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1212) at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1191) at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1129) at org.apache.hadoop.hdfs.DistributedFileSystem$8.doCall(DistributedFileSystem.java:531) at org.apache.hadoop.hdfs.DistributedFileSystem$8.doCall(DistributedFileSystem.java:528) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:542) at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:469) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1118) at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:1168) at org.apache.hadoop.io.SequenceFile$RecordCompressWriter.<init>(SequenceFile.java:1482) at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:287) at compress.TestSequenceFile1.main(TestSequenceFile1.java:28) Caused by: java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531) at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:700) at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:804) at org.apache.hadoop.ipc.Client$Connection.access$3800(Client.java:421) at org.apache.hadoop.ipc.Client.getConnection(Client.java:1606) at org.apache.hadoop.ipc.Client.call(Client.java:1435) ... 29 more
最新发布
10-19
### Java程序连接Redis时出现的`java.net.ConnectException: Connection refused`问题解决方案 当Java程序尝试连接到Redis服务器时,如果遇到`java.net.ConnectException: Connection refused`错误,通常意味着客户端无法与Redis服务器建立网络连接。以下是一些可能的原因及解决方法: 1. **Redis服务未启动** 确保Redis服务正在运行。可以通过命令行检查Redis服务状态,例如在Linux系统中使用`ps aux | grep redis`或`systemctl status redis`命令。如果服务未启动,可以使用`redis-server /path/to/redis.conf`命令手动启动Redis服务[^5]。 2. **Redis绑定地址配置错误** 默认情况下,Redis仅绑定到本地回环地址`127.0.0.1`,这会导致远程客户端无法访问。需要编辑Redis配置文件`redis.conf`,找到`bind 127.0.0.1`行并注释掉(通过在行首添加`#`),从而允许Redis监听所有网络接口。此外,确保`protected-mode`设置为`no`以禁用保护模式[^5]。 3. **防火墙阻止连接** 如果Redis部署在远程服务器上,防火墙可能会阻止客户端访问Redis端口(默认为6379)。可以通过以下命令临时关闭防火墙进行测试:`systemctl stop firewalld`。为了长期解决,可以配置防火墙规则以允许特定IP地址或端口访问,例如:`firewall-cmd --zone=public --add-port=6379/tcp --permanent`。 4. **客户端连接地址错误** 检查Java程序中配置的Redis连接地址是否正确。如果Redis运行在远程服务器上,应将`spring.redis.host`设置为实际的服务器IP地址,而不是`127.0.0.1`。例如: ```properties spring.redis.host=192.168.20.128 spring.redis.port=6379 ``` 此外,确保`spring.redis.timeout`值足够大以避免超时问题[^3]。 5. **网络连通性问题** 使用`ping`命令测试客户端与Redis服务器之间的网络连通性。如果无法ping通,可能是网络配置或路由问题导致的。还可以使用`telnet <server_ip> 6379`命令验证端口是否开放[^4]。 6. **密码认证失败** 如果Redis启用了密码认证,而客户端未提供正确的密码,也会导致连接被拒绝。确保在Java程序中正确配置`spring.redis.password`属性[^3]。 ```java // 示例代码:使用Jedis连接Redis import redis.clients.jedis.Jedis; public class RedisConnectionTest { public static void main(String[] args) { try (Jedis jedis = new Jedis("192.168.20.128", 6379)) { jedis.auth("your_redis_password"); // 如果有密码,请启用此行 System.out.println("Connected to Redis: " + jedis.ping()); } catch (Exception e) { e.printStackTrace(); } } } ``` 通过以上步骤逐一排查,通常可以解决`java.net.ConnectException: Connection refused`问题。 ### 注意事项 - 如果问题仍然存在,建议查看Redis日志文件(通常位于`/var/log/redis/redis.log`)以获取更多调试信息。 - 在生产环境中,不建议完全禁用防火墙或设置`protected-mode`为`no`,而是通过更安全的方式限制访问范围。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值