Android上的Kivy和OSC

mus*_*nte 1 python networking android osc kivy

我在kivy上做了一个简单的OSC测试,看起来我在Android手机上运行它们时遇到了问题.为了更好地理解Kivy和OSC是如何工作的,我做了一个小测试,它应该显示应用程序和另一台计算机之间的通信.一个服务器

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import *
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.lib.osc import oscAPI

class CButton(Button):
    def __init__(self, **kwargs):
        kwargs['text'] = kwargs.get('text', 'empty')
        super(CButton, self).__init__(**kwargs)

class OscWidget(GridLayout):
    def __init__(self, **kwargs):
        super(OscWidget, self).__init__(**kwargs)

    def callback(self, instance, *args):
        self.oscbutton.text = instance[2]
        oscAPI.sendMsg('/current/reply', dataArray=['answer'], ipAddr='192.168.1.101', port=8889)

class OscButtonApp(App):
    def buttpress(self, *args):
        oscAPI.sendMsg('/current/reply', dataArray=['call'], ipAddr='192.168.1.101', port=8889)

    def build(self):
        btnapp = OscWidget()
        oscAPI.init()
        oscid = oscAPI.listen(port=8889)
        osc.bind(oscid, btnapp.callback, '/test/reply')
        Clock.schedule_interval(lambda *x: osc.readQueue(oscid), 0)
        return btnapp


if __name__ == '__main__':
    OscButtonApp().run()
Run Code Online (Sandbox Code Playgroud)

当我在我的计算机上测试它时,它可以两种方式工作,所以从另一个终端我可以发送消息,而Kivy应用程序会做出反应:

oscAPI.sendMsg('/test/reply', dataArray=['change'], ipAddr='localhost', port=8889)
Run Code Online (Sandbox Code Playgroud)

发送此内容使Kivy更改按钮上的标签.此外,在另一个终端上设置监听端口(以及编辑脚本上的输出端口)向我显示从Kivy发送的消息.当我在手机上尝试这个简单的应用程序时,看起来它只能发送消息,而不能接收它们.我究竟做错了什么?

谢谢

tit*_*ito 5

默认情况下,oscApi.listen只收听127.0.0.1.如果您想接收来自所有人的消息,您需要听取0.0.0.0:

oscid = oscAPI.listen(ipAddr='0.0.0.0', port=8889)
Run Code Online (Sandbox Code Playgroud)