# TCP (lan) based chatting app # -------------------------------------------------------------- # server.py # -------------------------------------------------------------- # req. libs import socket import threading # global ## connection data host = '127.0.0.1' # server ip port = 4444 # free/open port ## starting server server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET - using internal socket, rather than unix socket # SOCK_STREAM - using tcp (& not udp) server.bind((host,port)) server.listen() ## clients & nicknames clients = [] nicknames = [] print(f"[+] Server is running on {host}:{port}") # send msg to all clients def broadcast(msg): for client in clients: client.send(msg) # handling clients def handle(client): while True: try: msg = client.recv(1024) broadcast(msg) except: # disconnecting inactive clients index = clients.index(client) # del f/ clients try: clients.remove(index) except: pass client.close() # del f/ nicknames nickname = nicknames.index(index) nicknames.remove(nickname) # display print(f"[-] '{nickname}' left") break # listening def receive(): while True: # accept conn client, addr = server.accept() print(f"[+] '{str(addr)}' connected") # request & store nickname client.send('NICKNAME'.encode('ascii')) nickname = client.recv(1024).decode('ascii') # store clients.append(client) nicknames.append(nickname) # display print(f"[+] '{nickname}' connected") # send msg broadcast(f"[#] {nickname} connected to the server\n".encode('ascii')) # handle client_handler = threading.Thread(target=handle, args=(client,)) client_handler.start() receive()