[Python] 纯文本查看 复制代码 import socket
import threading
import tkinter as tk
from tkinter import simpledialog, messagebox
# 单独导入 scrolledtext 模块
from tkinter import scrolledtext
# 全局变量
client = None
nickname = None
# 接收服务器消息
def receive():
while True:
try:
# 接收服务器消息
message = client.recv(1024).decode('utf-8')
if message == 'NICK':
client.send(nickname.encode('utf-8'))
else:
chat_box.insert(tk.END, message + '\n')
except:
# 发生错误,关闭连接
messagebox.showerror("错误", "与服务器的连接已断开!")
client.close()
break
# 发送消息到服务器
def send_message(event=None):
message = input_box.get()
input_box.delete(0, tk.END)
if message:
client.send(f'{nickname}: {message}'.encode('utf-8'))
# 连接到服务器
def connect():
global client, nickname
server_ip = ip_entry.get()
if not server_ip:
messagebox.showerror("错误", "请输入服务器IP地址!")
return
try:
nickname = simpledialog.askstring("昵称", "请输入你的昵称:")
if nickname:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((server_ip, 58588))
receive_thread = threading.Thread(target=receive)
receive_thread.start()
connect_button.config(state=tk.DISABLED)
ip_entry.config(state=tk.DISABLED)
except:
messagebox.showerror("错误", "无法连接到服务器!")
# 创建主窗口
root = tk.Tk()
root.title("客户端")
# 创建服务器IP输入框
ip_label = tk.Label(root, text="服务器IP:")
ip_label.pack(pady=5)
ip_entry = tk.Entry(root)
ip_entry.pack(pady=5)
# 创建连接按钮
connect_button = tk.Button(root, text="连接", command=connect)
connect_button.pack(pady=10)
# 创建滚动文本框
chat_box = scrolledtext.ScrolledText(root, width=40, height=20)
chat_box.pack(padx=10, pady=10)
# 创建输入框
input_box = tk.Entry(root, width=30)
input_box.pack(pady=10)
input_box.bind("<Return>", send_message)
# 创建发送按钮
send_button = tk.Button(root, text="发送", command=send_message)
send_button.pack(pady=10)
# 运行主循环
root.mainloop()
|