基本信息
源码名称:基于socket和tkinter的python网络聊天室程序
源码大小:13.87M
文件格式:.zip
开发语言:Python
更新时间:2019-06-10
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
基于python socket和tkinter界面库实现的网络聊天室程序,实现登录、注册、在线成员显示、聊天等功能
基于python socket和tkinter界面库实现的网络聊天室程序,实现登录、注册、在线成员显示、聊天等功能
服务端:
客户端:
from LoginPanel import LoginPanel from MainPanel import MainPanel from RegisterPanel import RegisterPanel from Client import ChatClient import MD5 from tkinter import messagebox from threading import Thread import time def send_message(): print("send message:") content = main_frame.get_send_text() if content == "" or content == "\n": print("空消息,拒绝发送") return print(content) # 清空输入框 main_frame.clear_send_text() client.send_message(content) def close_sk(): print("尝试断开socket连接") client.sk.close() def close_main_window(): close_sk() main_frame.main_frame.destroy() def close_login_window(): close_sk() login_frame.login_frame.destroy() # 关闭注册界面并打开登陆界面 def close_reg_window(): reg_frame.close() global login_frame login_frame = LoginPanel(login, register, close_login_window) login_frame.show() # 关闭登陆界面前往主界面 def goto_main_frame(user): login_frame.close() global main_frame main_frame = MainPanel(user, send_message, close_main_window) # 新开一个线程专门负责接收并处理数据 Thread(target=recv_data).start() main_frame.show() def login(): print("点击登录按钮") user, key = login_frame.get_input() # 密码传md5 key = MD5.gen_md5(key) if user == "" or key == "": messagebox.showwarning(title="提示", message="用户名或者密码为空") return print("user: " user ", key: " key) if client.check_user(user, key): # 验证成功 goto_main_frame(user) else: # 验证失败 messagebox.showerror(title="错误", message="用户名或者密码错误") # 登陆界面前往注册界面 def register(): print("点击注册按钮") login_frame.close() global reg_frame reg_frame = RegisterPanel(close_reg_window, register_submit, close_reg_window) reg_frame.show() # 提交注册表单 def register_submit(): print("开始注册") user, key, confirm = reg_frame.get_input() if user == "" or key == "" or confirm == "": messagebox.showwarning("错误", "请完成注册表单") return if not key == confirm: messagebox.showwarning("错误", "两次密码输入不一致") return # 发送注册请求 result = client.register_user(user, MD5.gen_md5(key)) if result == "0": # 注册成功,跳往登陆界面 messagebox.showinfo("成功", "注册成功") close_reg_window() elif result == "1": # 用户名重复 messagebox.showerror("错误", "该用户名已被注册") elif result == "2": # 未知错误 messagebox.showerror("错误", "发生未知错误") # 处理消息接收的线程方法 def recv_data(): # 暂停几秒,等主界面渲染完毕 time.sleep(1) while True: try: # 首先获取数据类型 _type = client.recv_all_string() print("recv type: " _type) if _type == "#!onlinelist#!": print("获取在线列表数据") online_list = list() for n in range(client.recv_number()): online_list.append(client.recv_all_string()) main_frame.refresh_friends(online_list) print(online_list) elif _type == "#!message#!": print("获取新消息") user = client.recv_all_string() print("user: " user) content = client.recv_all_string() print("message: " content) main_frame.recv_message(user, content) except Exception as e: print("接受服务器消息出错,消息接受子线程结束。" str(e)) break def start(): global client client = ChatClient() global login_frame login_frame = LoginPanel(login, register, close_login_window) login_frame.show() if __name__ == "__main__": start()