|
@@ -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()
|