59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
import socket
|
|
import threading
|
|
|
|
HOST = '127.0.0.1' # IP address for the server
|
|
PORT = 3000 # Port number for the server
|
|
|
|
# Function to receive messages from the server
|
|
|
|
|
|
def receive_messages(client_socket):
|
|
while True:
|
|
try:
|
|
message = client_socket.recv(1024).decode()
|
|
print(message)
|
|
except:
|
|
# If an error occurs, close the client socket and exit the thread
|
|
client_socket.close()
|
|
break
|
|
|
|
|
|
# Create a socket object
|
|
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
# Connect to the server
|
|
client_socket.connect((HOST, PORT))
|
|
|
|
# Create a new thread to receive messages from the server
|
|
receive_thread = threading.Thread(
|
|
target=receive_messages, args=(client_socket,))
|
|
receive_thread.start()
|
|
|
|
# Send a welcome message to the client
|
|
print("Welcome to the chat room!")
|
|
|
|
# Send nickname to the server
|
|
nickname = input("Please enter your nickname: ")
|
|
client_socket.sendall(nickname.encode())
|
|
|
|
while True:
|
|
message = input()
|
|
|
|
if message == "\q":
|
|
# Send a message to the server indicating that the user wants to quit
|
|
client_socket.sendall("\q".encode())
|
|
# Exit the program immediately
|
|
break
|
|
elif message.startswith("@"):
|
|
# If user types a message starting with "@" it is considered a private message
|
|
recipient = message.split(" ")[0][1:]
|
|
private_message = message.split(" ", 1)[1]
|
|
client_socket.sendall(f"@{recipient} {private_message}".encode())
|
|
|
|
else:
|
|
# Otherwise, send the message to the server to broadcast to all connected clients
|
|
client_socket.sendall(message.encode())
|
|
|
|
# Close the client socket
|
|
client_socket.close()
|