用 Python 开发一个 【聊天室】
监听客户端的连接 同时操作多个用户 广播消息通知
import socket
from threading import Thread
host = '127.0.0.1'
port = 8080
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
client = {}
addresses = {}
accept_num = 10
if __name__ == '__main__':
s.listen(accept_num)
print('服务器已经开启,正在监听用户的请求..')
while True:
conn, address = s.accept()
print(address, '已经建立连接')
conn.send('欢迎你来到帅帅的聊天室,
请输入你的昵称进行聊天'.encode('utf8'))
addresses[conn] = address
Thread(target=handle_client_in, args=(conn, address)).start(
)

def handle_client_in(conn, addr):
nikename = conn.recv(1024).decode('utf8')
welcome = f'欢迎 {nikename} 加入聊天室'
client[conn] = nikename
brodcast(bytes(welcome, 'utf8'))
while True:
¦ try:
¦ ¦ msg = conn.recv(1024)
¦ ¦ brodcast(msg, nikename+':')
¦ except:
¦ ¦ conn.close()
¦ ¦ del client[conn]
¦ ¦ brodcast(bytes(f'{nikename} 离开聊天室', 'utf8')
)
def brodcast(msg, nikename=''):
for conn in client:
conn.send(bytes(nikename, 'utf8') + msg)

用户可以运行一个聊天室软件 可以在里面看到所有聊天室用户的消息 自己可以编辑消息进行发送


创建聊天界面布局
创建面板

创建文本和按钮

容器位置排放

固定容器大小

文本按钮添加到容器中


发送事件绑定





Socket 的接入



Socket 消息发送

运行聊天室




赞 (0)