Untitled
unknown
plain_text
3 months ago
3.9 kB
9
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