| 
					
				 | 
			
			
				@@ -1,23 +1,48 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import socket 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from threading import Thread 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-server.bind(('127.0.0.1', 9094)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-server.listen(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-print('Server listen on 9090') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        client, addr = server.accept() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    except KeyboardInterrupt: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        server.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print('Client', addr, 'connect') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        client_name = client.recv(1024).decode('utf-8') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print(client_name, 'has been connect.') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            data = client.recv(1024).decode('utf-8') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if data == 'exit': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                client.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                print(client_name, ' : ', data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def up_server(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server.bind(('127.0.0.1', 9111)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server.listen(20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def listen(conn, client_list): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            message = conn.recv(1024).decode() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            client_list.remove(conn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            broadcast(message, client_list, conn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def broadcast(message, client_list, conn): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for client in client_list: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if client != conn: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            client.send(message.encode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print(message) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server = up_server() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    client_list = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        conn, addr = server.accept() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(f'Received connection from {conn.fileno()} {conn.getpeername()}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        username = conn.recv(1024).decode() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        client_list.append(conn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        join_message = "\n" + username + "join the chat." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        broadcast(join_message, client_list, conn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        thread = Thread(target=listen, args=(conn, client_list,)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        thread.daemon = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        thread.start() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if __name__ == "__main__": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    main() 
			 |