用python实现点对点聊天功能,任意一方可以为服务器或者客户端。并用tkinter创建简单的聊天界面,界面要显示聊天记录。代码每一行进行注释。
时间: 2023-06-25 22:01:57 浏览: 64
好的,下面是实现代码:
首先我们需要先安装socket库,打开终端或命令行窗口,输入以下命令进行安装:
```
pip install socket
```
然后,我们来实现服务器端的代码:
```python
import socket
import threading
# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本机主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 设置监听数量
server_socket.listen(5)
# 定义一个发送消息的方法
def send_message(client_socket, addr):
while True:
# 接收客户端发送的消息
message = client_socket.recv(1024).decode('utf-8')
if message == 'exit':
# 如果消息为exit,则退出循环
break
print(f'{addr[0]}:{addr[1]}说:{message}')
# 将消息发送给客户端
client_socket.send(f'你说:{message}'.encode('utf-8'))
# 关闭客户端连接
client_socket.close()
# 等待客户端连接
while True:
print('等待客户端连接...')
# 接受客户端连接
client_socket, addr = server_socket.accept()
print(f'客户端 {addr[0]}:{addr[1]} 已连接')
# 开启线程,发送消息
threading.Thread(target=send_message, args=(client_socket, addr)).start()
```
接着,我们来实现客户端的代码:
```python
import socket
import threading
import tkinter as tk
# 定义一个发送消息的方法
def send_message():
# 获取输入框中的消息
message = input_box.get()
# 将消息发送给服务器
client_socket.send(message.encode('utf-8'))
# 将消息显示在聊天记录框中
message_box.insert(tk.END, f'你说:{message}\n')
# 清空输入框
input_box.delete(0, tk.END)
# 定义一个接收消息的方法
def receive_message():
while True:
# 接收服务器发送的消息
message = client_socket.recv(1024).decode('utf-8')
if message == 'exit':
# 如果消息为exit,则退出循环
break
# 将消息显示在聊天记录框中
message_box.insert(tk.END, f'{message}\n')
# 关闭客户端连接
client_socket.close()
# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取服务器的主机名和端口号
host = input('请输入服务器主机名:')
port = int(input('请输入服务器端口号:'))
# 连接服务器
client_socket.connect((host, port))
# 创建一个窗口对象
window = tk.Tk()
window.title('聊天室')
# 创建一个聊天记录框
message_box = tk.Text(window)
message_box.pack()
# 创建一个输入框
input_box = tk.Entry(window)
input_box.pack()
# 创建一个发送按钮
send_button = tk.Button(window, text='发送', command=send_message)
send_button.pack()
# 开启线程,接收消息
threading.Thread(target=receive_message).start()
# 进入主循环
window.mainloop()
```
在运行客户端的代码前,需要先运行服务器端的代码。运行客户端代码后,界面中会弹出一个聊天室窗口,可以输入消息进行聊天,聊天记录会显示在窗口中。