Mychat123

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