解决Connection to http://192.168.1.* refused

本文介绍了解决Android开发中出现的HttpHostConnectException和NetworkOnMainThreadException的方法,包括配置权限、设置多线程以及使用StrictMode策略。

转自:http://blog.youkuaiyun.com/softwave/article/details/18804679
 

Android网络程序出现HttpHostConnectException及NetworkOnMainThreadException解决方法


症状:使用Android以GET或POST方式访问服务器,出现org.apache.http.conn.HttpHostConnectException: Connection to “×××” refused 的异常。

原因:访问网络的权限不够

解决方法:在AndroidManifest.xml中,加入

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.INTERNET"/>  

接下来,可能会出现android.os.NetworkOnMainThreadException异常

原因:高版本的android程序中不允许在主线程中访问网络

解决方法:可以使用多线程改写程序,也可以使用如下方法——

1.在第一个Activity中加入

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();  

2.在onCreate()中加入

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. StrictMode.setThreadPolicy(policy);  
这个办法要求最低编译环境是9,所以注意AndroidManifest.xml中minSdkVersion不要小于9

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <uses-sdk  
  2.         android:minSdkVersion="9"  
  3.         android:targetSdkVersion="14" />  
<think>我们正在解决一个具体的错误:使用rclone ls命令时出现'error listing: couldn't list files: Propfind "http://192.168.1.8/dav/": dial tcp 192.168.1.8:80: connect: connection refused'。这个错误表明rclone尝试通过HTTP(端口80)连接到192.168.1.8上的WebDAV服务时,连接被拒绝。 从错误信息中我们可以提取以下关键点: 1. 协议:HTTP(非HTTPS) 2. 地址:192.168.1.8 3. 端口:80 4. 路径:/dav/ 5. 错误类型:connection refused(连接被拒绝) 结合之前提供的引用和常见原因,我们可以从以下几个方面排查: 1. **目标服务是否运行**:确保192.168.1.8上的WebDAV服务正在运行。 2. **端口是否正确**:确认WebDAV服务是否在80端口监听?如果不是,需要指定正确的端口。 3. **网络连通性**:确认客户端可以访问192.168.1.8的80端口。 4. **客户端配置**:rclone的配置是否正确?特别是URL的格式。 另外,参考之前引用的内容,我们发现类似错误(如[^1][^2][^4])的解决方法通常涉及: - 检查服务端状态(是否运行,端口监听) - 检查防火墙设置(是否阻止了端口) - 客户端配置(尤其是当服务使用HTTP而非HTTPS时,可能需要特殊配置) 特别地,在引用[^4]中提到,对于非HTTPS(即HTTP)的服务,需要在docker的配置中添加`insecure-registries`。虽然rclone不是docker,但类似地,如果我们使用HTTP(非加密)协议,可能需要在rclone配置中明确允许不安全的连接(如果有相关选项)或者确认服务端和客户端之间的协议一致性。 然而,rclone本身对WebDAV的支持中,如果服务端是HTTP,那么配置中直接使用`http://`即可。所以这里的问题更可能是网络或服务端的问题。 步骤: 1. **验证服务端WebDAV服务是否运行**: 登录192.168.1.8,检查WebDAV服务(如Apache、Nginx或其他WebDAV服务器)是否正在运行。 例如,在Linux上,可以使用: ```bash systemctl status apache2 # 如果使用Apache systemctl status nginx # 如果使用Nginx ``` 如果没有运行,启动服务。 2. **检查端口监听情况**: 在192.168.1.8上运行: ```bash netstat -tuln | grep ':80' ``` 如果80端口没有被监听,则说明Web服务器没有运行或者没有配置监听80端口。 3. **检查防火墙**: 在192.168.1.8上,检查防火墙是否阻止了80端口。例如,如果使用`ufw`(Ubuntu): ```bash ufw status ``` 如果80端口没有放行,则添加规则: ```bash ufw allow 80/tcp ``` 4. **从客户端测试连接**: 在运行rclone的客户端机器上,使用telnet或curl测试连接: ```bash telnet 192.168.1.8 80 ``` 或者 ```bash curl -v http://192.168.1.8/dav/ ``` 如果telnet连接失败(无法连接)或curl返回连接拒绝,则证明网络或服务端问题。 5. **检查rclone配置**: 确认rclone的remote配置是否正确。例如,配置文件中应该有类似: ``` [webdav] type = webdav url = http://192.168.1.8/dav/ vendor = other ``` 特别注意:URL中的路径`/dav/`是否正确?如果服务端配置的WebDAV路径是别的,需要修改。 6. **服务端配置检查**: 确保WebDAV服务端配置正确。例如,在Apache中,可能配置了一个别名路径`/dav`指向某个目录,并且启用了WebDAV模块。 7. **使用HTTPS还是HTTP**: 注意,如果服务端配置了HTTPS,那么客户端应该使用`https://`,并且端口通常是443。但本错误中明确是http和80端口。 8. **其他可能**: - 目标主机IP地址是否变更? - 目标主机是否关机? - 客户端与目标主机是否在同一个网络? 如果上述步骤都检查无误,问题仍然存在,可以考虑以下高级步骤: 9. **抓包分析**: 在服务端使用tcpdump监听80端口,然后在客户端执行rclone命令,观察是否有SYN包到达服务端,以及服务端是否回复RST(表示拒绝)或其他。 10. **服务端日志**: 查看Web服务器的错误日志,可能提供拒绝连接的原因。 根据引用[^1]和[^4]中提到的修改配置文件的方法,虽然针对的是docker,但思路类似:确保客户端能够正确识别服务端地址并信任(如果是HTTP则无需信任,但网络要通)。对于rclone,我们没有“信任”问题,因为HTTP是明文传输。 因此,重点还是网络连通性和服务端状态。 现在,我们给出具体的解决步骤: ### 解决步骤 1. **确认目标主机在线**: 在客户端ping 192.168.1.8,确保网络连通。 ```bash ping 192.168.1.8 ``` 2. **检查目标服务端口开放情况**: 使用telnet或nc检查80端口: ```bash telnet 192.168.1.8 80 ``` 如果看到连接失败(connection refused)则服务端未在该端口监听;如果超时,可能是防火墙阻止。 3. **检查服务端Web服务状态**: 登录192.168.1.8,检查Web服务器进程是否存在,并监听80端口。 4. **检查服务端防火墙**: 临时关闭服务端防火墙(仅用于测试): ```bash ufw disable # Ubuntu ``` 或 ```bash systemctl stop firewalld # CentOS ``` 然后再次测试。 5. **检查rclone配置中的URL**: 确保rclone配置中的URL与WebDAV服务端配置的路径一致。例如,如果服务端配置的WebDAV根路径是`/webdav`,那么URL应为`http://192.168.1.8/webdav/`。 6. **测试WebDAV服务是否正常运行**: 在服务端本地使用curl测试: ```bash curl -X PROPFIND http://localhost/dav/ -u 用户名:密码 ``` 如果正常,应返回XML格式的文件列表。 7. **重启Web服务**: ```bash sudo systemctl restart apache2 # 或nginx ``` 8. **如果服务端端口不是80**: 假如服务端实际监听端口是5000,那么rclone配置中URL应写为`http://192.168.1.8:5000/dav/`。 如果以上步骤都正确,问题应该可以解决。 如果问题仍然存在,请提供更多信息(如服务端配置、客户端到服务端的网络情况等)。 下面生成相关问题: §§相关问题§§ 1. 如何配置Apache服务器提供WebDAV服务? 2. 如何在Linux中检查端口监听状态? 3. 如何使用curl测试WebDAV服务? 4. rclone配置WebDAV时的注意事项有哪些? 5. 如何设置防火墙规则允许特定端口(如80)的TCP连接? </think>### 解决 "rclone ls" 报错 "connection refused" 的方法 #### 错误分析 您的错误信息表明 rclone 尝试通过 WebDAV 协议连接 `192.168.1.8:80` 时被拒绝: ```bash Propfind "http://192.168.1.8/dav/": dial tcp 192.168.1.8:80: connect: connection refused ``` 这通常是网络连接问题或服务未启动导致的,结合引用内容分析主要原因包括: 1. **目标服务未运行**:WebDAV 服务未启动或崩溃(引用[^1][^2]) 2. **端口配置错误**:WebDAV 服务未在 80 端口监听(引用[^4]) 3. **防火墙阻止**:客户端或服务器的防火墙拦截了 80 端口连接(引用[^5]) 4. **客户端配置问题**:rclone 配置中的 URL 或协议错误(引用[^1][^4]) --- #### 🔧 解决步骤(按优先级排序) ##### 1. **验证 WebDAV 服务状态** 在服务器 `192.168.1.8` 上执行: ```bash # 检查 Web 服务器状态(Apache 示例) sudo systemctl status apache2 # 检查端口监听 sudo netstat -tuln | grep :80 ``` - 若无监听记录 → 启动服务:`sudo systemctl start apache2` - 若端口非 80 → 更新 rclone 配置中的端口号(如 `http://192.168.1.8:8080/dav/`) ##### 2. **测试网络连通性** 在运行 rclone 的客户端执行: ```bash # 基础连通性测试 ping 192.168.1.8 # 端口可达性测试(安装 telnet:sudo apt install telnet) telnet 192.168.1.8 80 ``` - 若 `telnet` 失败 → 检查防火墙: ```bash # 临时禁用防火墙(测试用) sudo ufw disable # Ubuntu sudo systemctl stop firewalld # CentOS ``` ##### 3. **检查 rclone 配置** 编辑 rclone 配置文件(通常位于 `~/.config/rclone/rclone.conf`): ```ini [webdav] # 您的配置名称 type = webdav url = http://192.168.1.8/dav/ # 确保路径正确 vendor = other ``` - 若服务使用 HTTPS,需修改为:`url = https://192.168.1.8/dav/` - 若服务在子路径,确认 `/dav/` 是否存在(引用[^4]) ##### 4. **服务端关键配置验证** 对于常见 WebDAV 服务: - **Apache**:确认启用模块 ```bash sudo a2enmod dav dav_fs sudo systemctl restart apache2 ``` - **Nginx**:检查 `location /dav/` 配置是否包含: ```nginx dav_methods PUT DELETE MKCOL COPY MOVE; create_full_put_path on; ``` ##### 5. **使用替代工具测试** 通过 `curl` 验证 WebDAV 服务: ```bash curl -X PROPFIND http://192.168.1.8/dav/ -u 用户名:密码 ``` - 返回 XML 文件列表 → 服务正常,问题在 rclone 配置 - 返回错误 → 服务端问题(检查服务日志:`sudo journalctl -u apache2`) --- #### ✅ 验证解决 修复后执行: ```bash rclone ls webdav:/path # 替换为您的配置名和路径 ``` 成功时应显示文件列表而非错误。 --- #### 📚 相关问题 1. 如何在 Linux 配置 Apache WebDAV 服务? 2. 如何诊断 "connection refused" 类网络错误? 3. rclone 连接 HTTPS WebDAV 时证书错误的解决方法? 4. 如何通过抓包分析 rclone 网络问题(使用 Wireshark)? 5. WebDAV 与 SMB/NFS 协议的性能对比及适用场景? > 提示:若服务端使用自定义端口,务必在 rclone 配置中显式声明(如 `http://192.168.1.8:8080/dav/`),否则会因协议不匹配失败(引用[^1][^4])。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值