【发布时间】:2015-06-09 07:17:16
【问题描述】:
我正在 kivy 中为 android 创建一个小应用程序,它将向我的笔记本电脑发送文本数据。我已经使用我的路由器创建了一个网络。
客户端应用的代码是
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import socket
Builder.load_string('''
<RootWidget>:
orientation: "vertical"
TextInput:
id: t1
size_hint_y: 75
Button:
text: "send data"
font_size: 75
size_hint_y: 25
on_press: root.send_data()
''')
class RootWidget(BoxLayout):
def __init__(self):
super(RootWidget, self).__init__()
host="10.0.0.5"
port=3000
self.s=socket.socket()
self.s.connect((host, port))
def send_data(self):
msg=str(self.ids.t1.text)
encoded_msg=bytes(msg, "utf-8")
self.s.send(encoded_msg)
class MyApp(App):
def build(self):
return RootWidget()
MyApp().run()
服务器运行在我电脑的终端...它的代码是
import socket
host="10.0.0.5"
port=3000
s=socket.socket()
s.bind((host, port))
s.listen(10)
def server():
while True:
c, addr=s.accept()
print("\nconnection successful with "+str(addr)+"\n\n")
data=c.recv(1024)
decoded_data=data.decode("utf-8")
if not decoded_data:
print("connection with "+ str(addr)+ " broken\n")
else:
print("-> "+ decoded_data + "\n")
server()
当我在笔记本电脑上运行服务器和客户端应用程序时,我得到了正确的结果
connection successful with ('10.0.0.5', 36719)
-> hello
^C
我使用 Buildozer 制作了我的客户端应用程序的 apk 文件。当我尝试从我的 android 手机运行应用程序时,它会连接,但是当我在 textinput 中键入文本并按下“发送数据”按钮时,应用程序会终止并且我在服务器终端上得到的输出是
connection successful with ('10.0.0.6', 35711)
connection with ('10.0.0.6', 35711) broken
^C
我无法找出在 android 上运行客户端应用程序的问题...需要帮助解决此问题
【问题讨论】:
-
您需要访问网络的权限吗?你有这个权限吗?
-
是的,我已启用该权限,这就是它连接到服务器的原因
-
这看起来像是 android 上的入站防火墙规则。这就是为什么它在接受来自手机的连接并尝试发回数据后中断的原因。
标签: android python sockets network-programming kivy