kaoskekw 2 years ago
parent
commit
60798f8a52
2 changed files with 103 additions and 31 deletions
  1. 57 10
      client.py
  2. 46 21
      server.py

+ 57 - 10
client.py

@@ -1,12 +1,59 @@
 import socket
+from threading import Thread
 
-client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-client.connect(('127.0.0.1', 9094))
-client_name = input('Enter your nickname: ')
-client.send(client_name.encode('utf-8'))
-while True:
-    try:
-        client.send(input().encode('utf-8'))
-    except KeyboardInterrupt:
-        socket.close()
-        break
+
+def listen(server, client):
+    while True:
+        message = server.recv(1024).decode()
+        print('\n' + message + '\n' + client + ':',end='')
+
+
+def main():
+    server = socket.socket()
+    server.connect(('127.0.0.1', 9111))
+
+    print("""
+             *     ,MMM8&&&.            *
+                  MMMM88&&&&&    .
+                 MMMM88&&&&&&&
+     *           MMM88&&&&&&&&
+                 MMM88&&&&&&&&
+                 'MMM88&&&&&&'
+                   'MMM8&&&'      *
+        |\___/|
+        )     (             .              '
+       =\     /=
+         )===(       *
+        /     \\
+        |     |
+       /       \\
+       \       /
+_/\_/\_/\__  _/_/\_/\_/\_/\_/\_/\_/\_/\_/\_
+|  |  |  |( (  |  |  |  |  |  |  |  |  |  |
+|  |  |  | ) ) |  |  |  |  |  |  |  |  |  |
+|  |  |  |(_(  |  |  |  |  |  |  |  |  |  |
+|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
+KEK_CHAT |  |  |  |  |  |  |  |  |  |  |  |
+""")
+
+    client = input("Enter your nickname: ")
+
+    server.send((client.encode()))
+
+    thread = Thread(target=listen, args=(server, client,))
+    thread.daemon = True
+    thread.start()
+
+    while True:
+        message = input(client + ' : ')
+
+        if message == '/exit':
+            break
+
+        server.send((client + ' : ' + message).encode())
+
+    server.close()
+
+
+if __name__ == "__main__":
+    main()

+ 46 - 21
server.py

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