Приложение Kivy, использующее сокет на Android, вылетает при попытке отправить данные - PullRequest
0 голосов
/ 06 мая 2019

Я создал APK с buildozer из main.py, а server.py работает на Raspberry Pi.Код работает нормально, и когда я нажимаю кнопку включения / выключения в приложении на моем телефоне, скрипт на малине печатает IP.

Когда я раскомментирую:

s.send(bytes('test', 'utf-8'))

... в main.py и:

msg = clientsocket.recv(1024)
print(msg.decode('utf-8'))

... в server.py, приложение вылетает, как только я нажимаю кнопку ON / OFF.Когда я запускаю main.py на моем компьютере, он работает просто отлично.

В чем здесь проблема?Я могу связно подключиться.Сервер принимает входящее соединение, но когда я пытаюсь что-то отправить, происходит сбой.

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()

server.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'))
...