用python实现点对点聊天功能,任意一方可以为服务器或者客户端。并用tkinter创建简单的界面。代码每一行进行注释。
时间: 2023-06-20 13:09:13 浏览: 147
好的,下面是一份简单的代码实现:
服务端代码:
```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)
print('等待客户端连接...')
def handle_client(client_socket, addr):
while True:
# 接收客户端的消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print('来自{}的消息:{}'.format(addr, data))
# 回复客户端的消息
client_socket.send(('已收到消息:"{}"'.format(data)).encode('utf-8'))
client_socket.close()
while True:
# 等待客户端连接
client_socket, addr = server_socket.accept()
print('连接来自:{}'.format(addr))
# 启动一个线程处理连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, addr))
client_thread.start()
```
客户端代码:
```python
import socket
import tkinter as tk
from tkinter import messagebox
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 连接服务端
client_socket.connect((host, port))
def send_msg():
msg = input_entry.get()
if msg:
# 发送消息到服务端
client_socket.send(msg.encode('utf-8'))
# 接收服务端的回复
recv_msg = client_socket.recv(1024).decode('utf-8')
messagebox.showinfo('回复', recv_msg)
# 清空输入框
input_entry.delete(0, tk.END)
# 创建界面
root = tk.Tk()
root.title('聊天室')
root.geometry('300x100')
input_label = tk.Label(root, text='请输入消息:')
input_label.pack()
input_entry = tk.Entry(root)
input_entry.pack()
send_button = tk.Button(root, text='发送', command=send_msg)
send_button.pack()
root.mainloop()
```
这份代码实现了一个简单的点对点聊天功能,其中服务端和客户端的代码分别运行在不同的终端上,通过套接字(socket)实现通信。界面使用了tkinter库创建,可以输入消息发送给服务端,并接收服务端的回复。
阅读全文