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

Kivy驾驶员疲劳检测App跨设备连接失败:ConnectionRefusedError求助

驾驶员疲劳检测App连接问题排查与解决

核心错误定位

ConnectionRefusedError: [errno 111] connection refused 明确说明Android客户端无法与PC服务器建立TCP连接,与摄像头采集环节无关(连接失败发生在数据传输前),重点排查网络连通性与服务器配置。

1. 修正服务器监听地址

服务器Socket绑定地址不能设为127.0.0.1(仅本地回环,手机无法访问),必须绑定到PC的局域网IP(如192.168.x.x)或0.0.0.0(监听所有网卡)。检查代码中的bind语句:

# 正确写法
server_socket.bind(('0.0.0.0', 80))
# 错误写法(仅本地可访问)
# server_socket.bind(('127.0.0.1', 80))

2. 确认设备在同一局域网

手机与PC必须连接同一WiFi,确保处于同一子网。在PC上通过ipconfig(Windows)或ip addr(Linux/macOS)获取局域网IP,然后在手机浏览器访问http://[PC_IP]:80,若无法打开则说明网络连通存在问题。

3. 验证服务器端口监听状态

在PC上执行命令确认服务器是否正常监听80端口:

  • Windows:netstat -ano | findstr :80
  • Linux/macOS:ss -tulpn | grep :80
    若未找到监听记录,说明服务器未正确启动Socket服务,检查是否有端口占用或代码异常。

4. 配置Android网络权限

在buildozer.spec中添加必要权限:

android.permissions = INTERNET, CAMERA

Android 10及以上必须明确声明INTERNET权限,否则App无法发起网络请求。

5. 更换非标准端口

80端口可能被系统或其他程序占用,尝试更换为8080、9999等非知名端口,同步修改服务器与客户端的端口配置。

6. 修正客户端连接逻辑

客户端连接地址必须填写PC的局域网IP,而非localhost或127.0.0.1(指向手机本地)。建议添加超时与异常处理:

import socket
try:
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.settimeout(10)  # 设置合理超时时间
    client_socket.connect(('192.168.1.100', 80))  # 替换为PC的局域网IP
except socket.timeout:
    print("连接超时,请检查网络")
except ConnectionRefusedError:
    print("连接被拒绝,请确认服务器状态与端口配置")

7. 解决黑屏问题

黑屏大概率是摄像头权限未获取:

  • 确认buildozer.spec中已添加CAMERA权限
  • Kivy调用摄像头时,尝试切换索引(0为后置,1为前置),确保使用正确的摄像头设备

额外测试建议

先编写简单的Socket echo程序验证网络连通:服务器接收字符串并原样返回,Android客户端发送测试数据,确认通信正常后再集成摄像头采集逻辑,逐步排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:25:24