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

如何实现从Python向Android Studio开发的App传输数字并显示

实现Python客户端向Android App传输数字的完整方案

嘿,你的毕设思路完全没问题——Python做客户端发数字,Android当服务器接收显示,这个架构在局域网场景下特别适合毕设需求。我给你拆解成具体可落地的步骤,一步步来就能搞定:

第一步:先搞定Android端的TCP服务器

Android这边不能在主线程做网络操作,所以得开个后台线程来监听端口。

先搞定权限

首先在AndroidManifest.xml里加上必要的网络权限,不然App连网会被系统拦:

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

编写服务器核心代码

比如在你的主Activity里,启动一个子线程来监听端口(我这里用8888当示例端口,你可以随便改,只要和Python端一致就行):

// 放在Activity的onCreate或者按钮点击事件里都行
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            // 初始化ServerSocket,监听8888端口
            ServerSocket serverSocket = new ServerSocket(8888);
            Log.d("TCP_SERVER", "等着Python客户端连过来...");
            
            // 这里会阻塞,直到有客户端连接
            Socket clientSocket = serverSocket.accept();
            Log.d("TCP_SERVER", "Python客户端连上啦!");
            
            // 获取输入流,读取Python发过来的数据
            BufferedReader inputReader = new BufferedReader(
                new InputStreamReader(clientSocket.getInputStream())
            );
            String receivedNum;
            
            // 循环读取数据,直到连接断开
            while ((receivedNum = inputReader.readLine()) != null) {
                // 注意:更新UI必须回到主线程,Android不让在子线程改UI
                final String finalNum = receivedNum;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // 假设你布局里有个TextView,id是tv_received_number,用来显示数字
                        TextView numberView = findViewById(R.id.tv_received_number);
                        numberView.setText("收到的数字:" + finalNum);
                    }
                });
            }
            
            // 用完记得关闭资源
            inputReader.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("TCP_SERVER", "服务器出错:" + e.getMessage());
        }
    }
}).start();

小提醒

如果你的Android版本是10及以上,后台线程可能会被系统杀死,测试的时候可以先把App留在前台,或者考虑用前台服务(毕设如果要求不高,前台运行测试就行)。

第二步:写Python客户端的发送代码

Python这边用自带的socket库就行,不用装额外依赖,超级简单:

import socket

# 这里换成你的Android设备的局域网IP!比如192.168.1.103
ANDROID_IP = '192.168.1.103'
# 端口要和Android端的ServerSocket端口一致,我这里是8888
PORT = 8888

# 创建TCP套接字并连接
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    try:
        s.connect((ANDROID_IP, PORT))
        # 要发送的数字,转成字符串再加换行——因为Android端用readLine()读取,需要换行符结束
        send_number = 666
        s.sendall(f"{send_number}\n".encode('utf-8'))
        print(f"数字 {send_number} 已经发出去啦!")
    except ConnectionRefusedError:
        print("连接失败!检查Android服务器有没有启动,IP和端口对不对,或者是不是在同一个WiFi下")

怎么找Android设备的局域网IP?

打开手机的「设置」→「关于手机」→「状态信息」,里面找「IP地址」就行;或者在Android代码里打印本机IP,这样更准确。

第三步:测试的关键注意事项

  • 必须确保Python电脑和Android手机在同一个WiFi局域网里!不然连不上
  • 关掉Android手机的防火墙,有些手机默认会拦截陌生端口的连接
  • 先启动Android App,等服务器开始监听了,再运行Python代码
  • 如果连接失败,先查IP和端口是不是对应,再查Android权限有没有加对,最后看是不是被系统限制了网络

毕设加分小优化

如果想让你的项目更亮眼,可以加这些:

  • 错误处理:比如Python端连接失败自动重试,Android端断开连接后自动重新监听
  • 批量发送:Python循环发送不同数字,Android实时更新显示
  • 数据格式升级:用JSON发送更复杂的数据(比如{"number": 123, "timestamp": "2024-05-20"})
  • UI交互:Android端加个「启动服务器」按钮,显示连接状态(已连接/未连接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:18