用Python做一款带用户界面本地通讯桌面软件 (二:简单网络通讯模型)
前言
上一期,用pyqt5 写了用户登录及注册界面:
用Python做一款带用户界面本地通讯桌面软件 (一:用户登录与注册)
并且用本地文件操作,模拟了用户登录和注册的业务逻辑,本期主要介绍将用户登录和注册加上网络通信模块。
1、模块分析
这里我们主要分以下2个模块:
1、客户端 Client 模块:主要存放用户操作界面代码,负责用户操作,接收服务端返回数据,呈现给客户。
2、服务端 Service 模块:主要存放服务端代码,负责接收处理客户请求,并返回数据给客户端。
其他的文件分析:
Client 模块下的temp文件夹:保存用户基本的资料数据,如聊天记录等。
data 文件夹:因没用数据库,所以data文件夹可以看做是服务端数据保存路径。
image文件夹:保存客户端界面用到的图片。
2、客户端功能及代码:
本次客户端相比于上期内容基本上没有多大变化,只是在上期基础上引入了负责与服务端通讯的client.py文件,修改了do_login用户登录方法及注册界面的register_func用户注册方法。
2.1 client.py
与服务端通讯:
'''
客户端通讯
'''
from socket import *
# 获取服务器地址:
with open('setting.txt','r') as f:
data = f.readlines()
address = (data[0].strip(),int(data[1]))
class Client(object):
def __init__(self):
# 创建套接字对象
self.sock_fd = socket(AF_INET,SOCK_STREAM)
# 连接服务器
self.sock_fd.connect(address)
# 发送请求,并接收服务端返回数据
def send_receive(self,message):
self.sock_fd.send(message.encode())
data = self.sock_fd.recv(2048)
return data.decode()
这里使用TCP套接字来进行通讯。
# 获取服务器地址:
with open('setting.txt','r') as f:
data = f.readlines()
address = (data[0].strip(),int(data[1]))
setting 文件作为客户端通讯地址文件,方便后期客户端在其他地址登录时修改。
以下为setting.txt文件内容:
127.0.0.1
8888
客户端通讯模块的引入:
from client import Client
# 用户登录页面
class LoginPage(QWidget):
'''用户注册,登录窗口'''
# 创建客户端以进行连接
try:
client = Client()
except:
pass
2.2 LoginPage类中do_login方法改写
# 登录方法
# 在登录方法中,检查用户设置的登录状态
def do_login(self):
# 获取用户输入的用户名及密码
name,password = self.name_line.text(),self.password_line.text(