参考视频添加链接描述
from datetime import time
from socket import socket
from threading import Thread
class Server:
def __init__(self):
self.server = socket.socket()
self.server.bind(("127.0.0.1", 9595))
self.server.listen(5)
# 所有的客户端
self.clients = []
# 用户名字与ip的绑定信息
self.clients_name_ip = {}
def get_conn(self):
while True:
# 获取连接客户端信息
client, address = self.server.accept()
print(address)
data = "与服务器连接成功!"
client.send(data.encode())
# 连接的用户添加到服务器的用户列表中
self.clients.append(client)
#服务器启动多个线程处理客户端的消息
Thread(target=self.get_msg,args=(client,self.clients,self.clients_name_ip,address)).start()
# 进行所有客户端消息处理
def get_msg(self, client, clients, clients_name_ip, address):
# 接受客户端发来的昵称
name = client.recv(1024).decode()
# 昵称与IP进行绑定
clients_name_ip[address] = name
while True:
# 获取所有客户发送的消息
try:
recv_data = client.recv(1024).decode()
except Exception as e:
self.close_client(client,address)
break
if recv_data.upper() == "Q":
self.close_client(client, address)
break
for c in clients:
c.send((clients_name_ip[address]+" "+time.strftime("%x")+"\n"+recv_data).encode())
def close_client(self,client,address):
self.clients.remove(client)
client.close()
for c in self.client:
c.send((self.clients_name_ip[address]+"已经离开").encode())