Upgraded Host Script (Run on PC 1)pythonimport socket
import threading
# Threading Lock prevents simultaneous modifications from crashing the server
clients_lock = threading.Lock()
clients = []
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Allows instant server restarts without "address already in use" errors
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('0.0.0.0', 8080)) # Shifted to a safer web port
server.listen()
def broadcast(message, _client):
with clients_lock:
for client in clients:
if client != _client: # Don't echo the message back to the sender
try:
client.send(message)
except:
client.close()
if client in clients:
clients.remove(client)
def handle_client(client):
while True:
try:
message = client.recv(1024)
if not message:
break
broadcast(message, client)
except:
break
with clients_lock:
if client in clients:
clients.remove(client)
client.close()
print("Server active on port 8080. Awaiting clients...")
while True:
try:
client, address = server.accept()
with clients_lock:
clients.append(client)
threading.Thread(target=handle_client, args=(client,), daemon=True).start()
except KeyboardInterrupt:
break
server.close()
Use code with caution.💻 Upgraded Guest Script (Run on PCs 2–6)pythonimport socket
import threading
import sys
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# CHANGE THIS to your Host PC's actual IP address
HOST_IP = '192.168.1.50'
try:
client.connect((HOST_IP, 8080))
except Exception as e:
print(f"Could not connect to server. Check IP/Firewall. Error: {e}")
sys.exit()
def receive():
while True:
try:
message = client.recv(1024).decode('utf-8')
if not message:
print("n[Disconnected from server]")
break
# Prints a clean newline before showing the incoming message
print(f"n{message}n> ", end="")
except:
print("n[Connection Lost]")
break
client.close()
def write():
name = input("Choose your nickname: ")
print("Connected! Start typing below.n")
while True:
try:
msg = input("> ")
if msg.strip(): # Prevents sending empty spam messages
client.send(f"{name}: {msg}".encode('utf-8'))
except:
break
# daemon=True ensures threads close instantly if you close the terminal window
threading.Thread(target=receive, daemon=True).start()
write()