python实现增删好友的功能 ,客户端与服务器端,基于TK界面设计
时间: 2023-12-08 08:06:45 浏览: 30
下面是一个基于Tkinter界面设计的客户端和服务器端实现增删好友功能的示例代码:
服务器端代码:
```python
import socket
import threading
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口号
server_address = ('localhost', 8888)
server_socket.bind(server_address)
# 设置监听队列大小
server_socket.listen(5)
# 存储好友列表
friends = {}
# 处理客户端请求的函数
def handle_client(client_socket, client_address):
print("客户端 {} 已连接".format(client_address))
while True:
# 接收客户端发送的数据
data = client_socket.recv(1024).decode('utf-8')
if not data:
print("客户端 {} 已断开".format(client_address))
break
# 解析客户端发送的命令
cmd, *args = data.split()
if cmd == "add":
name, phone = args
friends[name] = phone
client_socket.sendall("已成功添加好友:{},电话号码为:{}".format(name, phone).encode('utf-8'))
elif cmd == "delete":
name = args[0]
if name in friends:
del friends[name]
client_socket.sendall("已成功删除好友:{}".format(name).encode('utf-8'))
else:
client_socket.sendall("该好友不存在".encode('utf-8'))
else:
client_socket.sendall("无效的命令".encode('utf-8'))
# 关闭客户端套接字
client_socket.close()
# 监听客户端连接请求
while True:
print("等待客户端连接...")
# 接受客户端连接请求
client_socket, client_address = server_socket.accept()
# 创建新线程来处理客户端请求
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
```
客户端代码:
```python
import socket
import tkinter as tk
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('localhost', 8888)
client_socket.connect(server_address)
# 创建主窗口
window = tk.Tk()
window.title("好友管理系统")
window.geometry("300x200")
# 创建标签和文本框
name_label = tk.Label(window, text="姓名:")
name_label.grid(row=0, column=0)
name_entry = tk.Entry(window)
name_entry.grid(row=0, column=1)
phone_label = tk.Label(window, text="电话:")
phone_label.grid(row=1, column=0)
phone_entry = tk.Entry(window)
phone_entry.grid(row=1, column=1)
# 定义添加好友函数
def add_friend():
name = name_entry.get().strip()
phone = phone_entry.get().strip()
if name and phone:
# 发送添加好友命令给服务器
cmd = "add {} {}\n".format(name, phone)
client_socket.sendall(cmd.encode('utf-8'))
# 接收服务器的回复并显示在消息框中
response = client_socket.recv(1024).decode('utf-8')
message_box.insert(tk.END, response + "\n")
else:
message_box.insert(tk.END, "姓名和电话不能为空\n")
# 定义删除好友函数
def delete_friend():
name = name_entry.get().strip()
if name:
# 发送删除好友命令给服务器
cmd = "delete {}\n".format(name)
client_socket.sendall(cmd.encode('utf-8'))
# 接收服务器的回复并显示在消息框中
response = client_socket.recv(1024).decode('utf-8')
message_box.insert(tk.END, response + "\n")
else:
message_box.insert(tk.END, "姓名不能为空\n")
# 创建按钮
add_button = tk.Button(window, text="添加好友", command=add_friend)
add_button.grid(row=2, column=0)
delete_button = tk.Button(window, text="删除好友", command=delete_friend)
delete_button.grid(row=2, column=1)
# 创建消息框
message_box = tk.Text(window)
message_box.grid(row=3, column=0, columnspan=2)
# 进入主循环
window.mainloop()
```
该程序中,服务器端使用一个字典来存储好友列表,当收到客户端发送的添加好友或删除好友命令时,服务器端会解析命令并对字典进行相应的操作,然后将操作结果发送回客户端。客户端使用Tkinter来创建一个简单的用户界面,当用户点击添加好友或删除好友按钮时,客户端会将命令发送给服务器,并显示服务器的回复结果。