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()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值