您的当前位置:首页正文

建立一个简易的python服务器端android客户端的聊天应用app

2024-11-30 来源:个人技术集锦

持续更新中...

python服务器端

Tkinter

kinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中

教程链接:

本文中用到的函数

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:

在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之间的通信)

相机实现

参考:

startActivityForResult() 参考

GPS实现

 

显示全文