首页 > 解决方案 > 当我尝试发送数据时,使用套接字的 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'))

标签: pythonkivybuildozerpython-sockets

解决方案


推荐阅读