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

持续更新中...

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.csdn.net/ww897532167/article/details/71525514/

startActivityForResult() 参考https://blog.csdn.net/csr_yang/article/details/31034291

GPS实现

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值