Skip to content

Commit f21e297

Browse files
committed
增加注释
1 parent e963bd6 commit f21e297

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

局域网聊天室.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
# Client class
1010
class Client:
11+
# 初始化函数,创建一个socket,用于客户端,创建一个字符串,用于存储客户端的昵称
1112
def __init__(self, sock, addr):
1213
self.socket = sock
1314
self.addr = addr
@@ -16,6 +17,7 @@ def __init__(self, sock, addr):
1617

1718
# Chat class
1819
class Chat:
20+
# 初始化函数,创建一个字典,用于存储客户端,创建一个socket,用于服务器,绑定服务器地址和端口,创建一个列表,用于存储客户端的socket
1921
def __init__(self):
2022
self.clients = {}
2123
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -24,6 +26,7 @@ def __init__(self):
2426
self.server_socket.listen(511)
2527
self.client_sockets = [self.server_socket]
2628

29+
# 添加客户端函数,将客户端的socket和地址加入到字典和列表中
2730
def add_client(self, client_socket, addr):
2831
client = Client(client_socket, addr)
2932
self.clients[client_socket] = client
@@ -33,6 +36,7 @@ def add_client(self, client_socket, addr):
3336
client_socket.send(welcome_msg.encode())
3437
print(f"Connected client {addr[1]}")
3538

39+
# 删除客户端函数,将客户端的socket和地址从字典和列表中删除
3640
def remove_client(self, client_socket):
3741
print(
3842
f"Disconnected client {self.clients[client_socket].addr[1]}, nick={self.clients[client_socket].nick}"
@@ -42,20 +46,29 @@ def remove_client(self, client_socket):
4246

4347
def run(self):
4448
while True:
49+
# 使用select函数,监听客户端socket,如果有客户端socket有数据发送过来,就将其加入到rlist列表中
4550
rlist, _, _ = select.select(self.client_sockets, [], [], 1)
4651

52+
# 遍历rlist列表,处理客户端socket发送过来的数据
4753
for ready_socket in rlist:
54+
# 如果是服务器socket,说明有新的客户端连接,调用add_client函数,将其加入到字典和列表中
4855
if ready_socket == self.server_socket:
4956
client_socket, addr = self.server_socket.accept()
5057
self.add_client(client_socket, addr)
58+
# 如果不是服务器socket,说明是已经连接的客户端发送数据过来,调用recv函数接收数据
5159
else:
5260
try:
61+
# 接收数据,最大长度为256字节
5362
data = ready_socket.recv(256)
63+
# 如果接收到的数据为空,说明客户端已经断开连接,调用remove_client函数,将其从字典和列表中删除
5464
if not data:
5565
self.remove_client(ready_socket)
66+
# 如果接收到的数据不为空,说明客户端发送了数据过来,将其发送给其他客户端
5667
else:
68+
# 获取发送数据的客户端的昵称
5769
client = self.clients[ready_socket]
5870

71+
# 如果发送的数据以"/"开头,说明是命令,将其解析
5972
if data[0] == b"/":
6073
args = data.decode()[1:].split(" ")
6174
cmd = args[0]
@@ -65,10 +78,12 @@ def run(self):
6578
errmsg = "Unsupported command\n"
6679
ready_socket.send(errmsg.encode())
6780

81+
# 如果发送的数据不是以"/"开头,说明是聊天信息,将其发送给其他客户端
6882
else:
6983
msg = f"{client.nick}> {data.decode()}".encode()
7084
print(msg.decode(), end="")
7185

86+
# 遍历客户端的socket,将消息发送给其他客户端
7287
for sock in self.clients:
7388
if sock != ready_socket:
7489
sock.send(msg)

0 commit comments

Comments
 (0)