You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android向本地PHP服务器发送POST数据时连接被拒绝求助

问题排查与解决方案

先看你报错堆栈里最关键的一行:Caused by: java.net.SocketException: Permission denied,这是核心问题,咱们一步步来解决:

1. 补全Android网络权限

你的应用缺少访问网络的必要权限,必须在AndroidManifest.xml里添加以下配置:

<uses-permission android:name="android.permission.INTERNET" />
<!-- 可选,添加后可辅助判断设备网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2. 处理Android 9+的明文网络限制

如果你的设备是Android 9(API 28)及以上版本,系统默认禁止明文HTTP请求(仅允许HTTPS),而你的请求目标是http://192.168.1.103,所以需要单独配置允许该IP的明文访问:

  • 在res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">192.168.1.103</domain>
    </domain-config>
</network-security-config>
  • 然后在AndroidManifest.xml的<application>标签中引用这个配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

3. 替换已弃用的Apache HttpClient

Android 6.0(API 23)开始已经弃用了org.apache.http相关类,继续使用可能会出现兼容性问题,推荐换成原生的HttpURLConnection,这里给你改写后的postData方法示例:

private void postData() {
    try {
        String postReceiverUrl = "http://192.168.1.103/bot/post.php";
        Log.v(TAG, "postURL: " + postReceiverUrl);

        URL url = new URL(postReceiverUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        // 构造POST参数
        String postData = "abcd=1234&asif=5678";
        OutputStream os = conn.getOutputStream();
        os.write(postData.getBytes(StandardCharsets.UTF_8));
        os.flush();
        os.close();

        // 获取服务器响应
        int responseCode = conn.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder responseStr = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                responseStr.append(line);
            }
            in.close();
            Log.v(TAG, "Response: " + responseStr.toString());
        } else {
            Log.e(TAG, "Server returned error code: " + responseCode);
        }
        conn.disconnect();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4. 本地服务器基础排查

确保你的PHP服务器本身没有问题:

  • 用同一局域网内的电脑浏览器访问http://192.168.1.103/bot/post.php,确认服务器能正常响应;
  • 用Postman发送POST请求到该地址,携带abcd=1234和asif=5678参数,验证服务器能正确接收并返回数据;
  • 检查服务器防火墙是否拦截了80端口(如果用了自定义端口,要在URL里补充,比如http://192.168.1.103:8080/bot/post.php);
  • 确认手机和服务器连接在同一个Wi-Fi网络下,IP地址没有输入错误。

按照上面的步骤逐一排查,应该就能解决连接被拒绝的问题了。

内容的提问来源于stack exchange,提问作者Asif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:43:23