如何实现从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
相关产品推荐
相关产品推荐

