python - 当我尝试发送数据时,使用套接字的 Kivy App 在 Android 上崩溃
问题描述
我已经用 main.py 的 buildozer 构建了一个 APK,并且 server.py 在树莓派上运行。代码工作正常,当我按下手机应用程序中的开/关按钮时,覆盆子上的脚本会打印出 IP。
当我取消注释时:
s.send(bytes('test', 'utf-8'))
...在 main.py 和:
msg = clientsocket.recv(1024)
print(msg.decode('utf-8'))
...在 server.py 中,只要我按下 ON/OFF 按钮,应用程序就会崩溃。当我在我的计算机上运行 main.py 时,它工作得很好。
这里有什么问题?我显然可以连接。服务器确实接受传入的连接,但是当我尝试发送某些内容时,它崩溃了。
主文件
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
import socket
class Main(App):
def build(self):
StartPage = GridLayout()
StartPage.cols = 1
text = Label(text='SwitchPi')
StartPage.add_widget(text)
button = Button(text='ON/OFF')
button.bind(on_press=self.btn)
StartPage.add_widget(button)
self.sm = ScreenManager()
screen = Screen(name='start')
screen.add_widget(StartPage)
self.sm.add_widget(screen)
return self.sm
def btn(self, instance):
ip = 'my ip address'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, 1234))
#s.send(bytes('test', 'utf-8'))
Main().run()
服务器.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 1234))
s.listen(5)
while True:
clientsocket, address = s.accept()
print(address)
#msg = clientsocket.recv(1024)
#print(msg.decode('utf-8'))
解决方案
推荐阅读
- prometheus - PromQL 中 histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) 背后的数学是什么
- python - 打印语句中出现的间距
- javascript - 更新的状态值不会反映在 React 中的 setInterval() 中
- sql-server - 如何以最近 6 个月的间隔计算一个组?
- json - 没有密钥时如何在 Swift 中解析 JSON 数组
- node.js - 此应用尚未经过 Google 验证。只有在您了解并信任开发人员的情况下才能继续
- java - 如何根据用户输入找到最小的数字 - Java
- oracle - 使用 PLSQL 从 POST ORDS 中的 Multipart/Form-data 读取文件
- regex - 将 .htaccess 中的 URL 编码 (%20) 替换为 +
- javascript - 如何用javascript替换函数替换字符串第一个之后的所有句点?