持续更新中...
python服务器端
Tkinter
kinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中
教程链接:http://www.runoob.com/python/python-gui-tkinter.html
本文中用到的函数
tkinter.TK() #创建一个窗口程序
*.title() #更改窗口标题
tkinter.Frame() #在屏幕上显示一个矩形区域,多用于容器
tkinter.pack() #tkinter的几何方法?包装
--- side表示放置位置
--- fill表示
---expand表示
Label() 可以显示文本?
守护线程
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
Thread
利用threading.thread(func, args)初始一个新进程
调用.start()来启用进程
python服务器端code
import socket
import time
import tkinter
from tkinter.scrolledtext import ScrolledText
import threading
import requests
import tkinter
from socket import *
from time import ctime
from tkinter import *
global Text_Show
def AI_Talk(s):
response = requests.post("http://www.tuling123.com/openapi/api",
data={
"key":"5636c0854e88430383a861151bf764ca",
"info":s,
"userid":"123456"
})
response = response.json()
answer = response['text']
print(type(answer))
print(answer)
return answer
def Sever_Thread(sock,caddr):
Text_Show.insert("end","客户端@"+str(caddr[1])+"已连接\n")
while True:
data = str(sock.recv(1024).decode('UTF-8'))
if data=='quit':
Text_Show('end','客户端@'+str(caddr[1])+'终止了对话')
Text_Show.see(tkinter.END)
else:
Text_Show.insert('end','来自客户端@'+str(caddr[1])+'的消息为:'+data+'\n')
Text_Show.see(tkinter.END)
time.sleep(0.2)
data=AI_Talk(data)
sock.sendall(bytes(data,'UTF-8'))
Text_Show.insert('end',"线程关闭")
sock.close()
def Sever_Accept(ss):
while True:
sock,caddr=ss.accept()
Thread2 = threading.Thread(target=Sever_Thread, args = (sock, caddr))
Thread2.daemon=True
Thread2.start()
def Sever_Init():
HOST =''
PORT = 4700
ADDR = (HOST, PORT)
print(ADDR)
ss = socket(AF_INET, SOCK_STREAM, 0)
ss.bind(ADDR)
ss.listen(20) #允许最大监听数
Thread1=threading.Thread(target=Sever_Accept,args=(ss,))
Thread1.daemon=True #线程守护
Thread1.start()#主函数
if __name__ == "__main__":
root=tkinter.Tk()
root.title("聊天小程序服务器端 ")
frame1=Frame(root)
frame1.pack()
IP_Show_Label=Label(frame1,text="默认IP:127.0.0.1\n默认端口为6000\n无法更改!!!")
IP_Show_Label.pack(side='left')
frame2=Frame(root)
frame2.pack()
Text_Show=ScrolledText(frame2,width=100,height=30)
Text_Show.bind("<KeyPress>",lambda e:"break")
Text_Show.pack(side="bottom",fill = 'both', expand = True)
Sever_Init()
root.mainloop()
Android端
参考SharePreference:https://www.cnblogs.com/smyhvae/p/4019379.html
Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File;此外还有一种网络存储。由于Android系统中,数据基本都是私有的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。
在Android中,可以使用几种方式实现数据持久化:
- Shared Preferences:除SQLite数据库外,另一种常用的数据存储方式。共享参数形式,一种以Key-Value的键值对形式保存数据的方式,其本质就是一个xml文件。Android内置的,一般应用的配置信息,推荐使用此种方式保存。
- Internal Storage:使用Android设备自带的内存存储数据。
- External Storage:使用外部存储设备存储数据,一般是指Sdcard。
- SQLite Databases:以SQLite数据库存储结构化的数据。SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。
- Network Connection:使用基于网络的服务获取数据。
个人认为:sharePreference适合轻量数据永久保存,sqlite是小型数据库,content provider应该是进程间通讯的搬运工(可以实现系统应用与app之间的通信)
相机实现
参考:https://blog.youkuaiyun.com/ww897532167/article/details/71525514/
startActivityForResult() 参考https://blog.youkuaiyun.com/csr_yang/article/details/31034291
GPS实现