一、使用socket实现聊天室并显示详细代码 1、功能需求: 本设计主要实现一个局域网聊天工具的设计。设计主要分为两部分,客户端部分和服务器部分,可以是终端字符界面,客户端登陆到服务器聊天后,可以在聊天室内
时间: 2024-05-08 15:22:12 浏览: 10
发送和接收消息。
2、技术实现:
客户端和服务器之间通过socket通信进行数据传输,使用Python的socket模块进行编程。
客户端界面使用Python的tkinter模块进行编程,服务器端没有界面。
3、代码实现:
服务器端代码:
```
import socket
import threading
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8000))
server.listen()
users = []
def broadcast(msg):
for user in users:
user.send(msg)
def handle_connection(conn, addr):
print('{} connected.'.format(addr))
users.append(conn)
while True:
try:
msg = conn.recv(1024)
if msg:
broadcast(msg)
else:
conn.close()
users.remove(conn)
print('{} disconnected.'.format(addr))
break
except:
conn.close()
users.remove(conn)
print('{} disconnected.'.format(addr))
break
while True:
conn, addr = server.accept()
t = threading.Thread(target=handle_connection, args=(conn, addr))
t.start()
```
客户端代码:
```
import socket
import threading
import tkinter as tk
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
def receive():
while True:
try:
msg = client.recv(1024).decode('utf-8')
msg_list.insert(tk.END, msg)
except:
break
def send(event=None):
msg = my_msg.get()
my_msg.set('')
client.send(bytes(msg, 'utf-8'))
if msg == '{quit}':
client.close()
root.quit()
def on_closing(event=None):
my_msg.set('{quit}')
send()
root = tk.Tk()
root.title('Chat Room')
messages_frame = tk.Frame(root)
my_msg = tk.StringVar()
my_msg.set('')
scrollbar = tk.Scrollbar(messages_frame)
msg_list = tk.Listbox(messages_frame, height=15, width=50, yscrollcommand=scrollbar.set)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
msg_list.pack(side=tk.LEFT, fill=tk.BOTH)
msg_list.pack()
messages_frame.pack()
entry_field = tk.Entry(root, textvariable=my_msg)
entry_field.bind('<Return>', send)
entry_field.pack()
send_button = tk.Button(root, text='Send', command=send)
send_button.pack()
root.protocol('WM_DELETE_WINDOW', on_closing)
receive_thread = threading.Thread(target=receive)
receive_thread.start()
tk.mainloop()
```
4、使用方法:
先运行服务器端代码,再运行客户端代码,输入用户名并点击“Send”按钮即可进入聊天室。在聊天室中输入消息并点击“Send”按钮即可发送消息。如果想退出聊天室,只需要输入“{quit}”即可。