Untitled

 avatar
unknown
plain_text
2 months ago
3.9 kB
8
Indexable
import socket
import threading

# Server IP (use your server device IP)
HOST = '10.100.13.137'
PORT = 12345

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))

username = input("Enter your username: ")

# Receive messages
def receive():
    while True:
        try:
            message = client.recv(1024).decode('utf-8')
            
            if message == "USERNAME":
                client.send(username.encode('utf-8'))
            else:
                print(message)
                
        except Exception as e:
            print("An error occurred!", e)
            client.close()
            break

# Send messages
def write():
    while True:
        message = input("")
        
        if message.startswith("/msg"):
            client.send(message.encode('utf-8'))
        else:
            client.send(f"{username}: {message}".encode('utf-8'))

# Threads
receive_thread = threading.Thread(target=receive)
receive_thread.start()

write_thread = threading.Thread(target=write)
write_thread.start()








import socket
import threading
from datetime import datetime

HOST = '0.0.0.0'
PORT = 12345

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((HOST, PORT))
server.listen()

clients = []
usernames = []
chat_history = []

def log_message(message):
    with open("chat_log.txt", "a") as file:
        file.write(f"[{datetime.now()}] {message}\n")

def broadcast(message):
    for client in clients:
        client.send(message)

def handle(client):
    while True:
        try:
            message = client.recv(1024).decode('utf-8')
            sender = usernames[clients.index(client)]

            if message.startswith("/msg"):
                parts = message.split(" ", 2)
                if len(parts) >= 3:
                    target_user = parts[1]
                    private_msg = parts[2]

                    if target_user in usernames:
                        index = usernames.index(target_user)
                        target_client = clients[index]
                        full_msg = f"[Private] {sender}: {private_msg}"
                        target_client.send(full_msg.encode('utf-8'))
                        log_message(full_msg)
                    else:
                        client.send("User not found".encode('utf-8'))
            else:
                broadcast(message.encode('utf-8'))
                chat_history.append(message)
                log_message(message)

        except:
            index = clients.index(client)
            clients.remove(client)
            client.close()
            username = usernames[index]

            leave_msg = f"{username} left the chat!"
            broadcast(leave_msg.encode('utf-8'))
            chat_history.append(leave_msg)
            log_message(leave_msg)

            usernames.remove(username)
            break

def receive():
    while True:
        client, address = server.accept()
        print(f"Connected with {str(address)}")

        client.send("USERNAME".encode('utf-8'))
        username = client.recv(1024).decode('utf-8')

        usernames.append(username)
        clients.append(client)

        print(f"Username is {username}")

        join_msg = f"{username} joined the chat!"
        broadcast(join_msg.encode('utf-8'))
        chat_history.append(join_msg)
        log_message(join_msg)

        client.send("\n---- Chat History ----\n".encode('utf-8'))
        for msg in chat_history:
            client.send((msg + "\n").encode('utf-8'))
        client.send("----------------------\n".encode('utf-8'))

        thread = threading.Thread(target=handle, args=(client,))
        thread.start()

print("Server is listening...")
receive()
Editor is loading...
Leave a Comment