This branch has the chatserverplus stuff in it, copied over the client, removed the unnecessary files included.
This commit is contained in:
parent
a2adaa05a6
commit
f3c913c97c
11 changed files with 56 additions and 352 deletions
|
|
@ -0,0 +1,55 @@
|
|||
import socket
|
||||
import sys
|
||||
import select
|
||||
|
||||
BUFFER_SIZE = 1024
|
||||
DEFAULT_HOST = 'localhost'
|
||||
DEFAULT_PORT = 8181
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
SERVER_HOST = input(f"Enter server host (default: {DEFAULT_HOST}): ") or DEFAULT_HOST
|
||||
SERVER_PORT = input(f"Enter server port (default: {DEFAULT_PORT}): ") or DEFAULT_PORT
|
||||
SERVER_PORT = int(SERVER_PORT)
|
||||
else:
|
||||
SERVER_HOST = sys.argv[1]
|
||||
SERVER_PORT = int(sys.argv[2])
|
||||
|
||||
# create a socket object
|
||||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
# connect to the server
|
||||
client_socket.connect((SERVER_HOST, SERVER_PORT))
|
||||
print(f"Connected to chat server at {SERVER_HOST}:{SERVER_PORT}")
|
||||
|
||||
while True:
|
||||
# use select to wait for either server messages or user input
|
||||
read_sockets, _, _ = select.select([client_socket, sys.stdin], [], [])
|
||||
|
||||
for sock in read_sockets:
|
||||
if sock == client_socket:
|
||||
# receive message from server
|
||||
server_message = client_socket.recv(BUFFER_SIZE).decode('utf-8')
|
||||
if not server_message:
|
||||
print("Disconnected from server")
|
||||
return
|
||||
print(f"\n{server_message}")
|
||||
print("> ", end="", flush=True)
|
||||
else:
|
||||
# prompt for user input
|
||||
client_message = input()
|
||||
if client_message.strip() == "%!":
|
||||
print("Exiting chat...")
|
||||
return
|
||||
|
||||
# send message to server
|
||||
client_socket.send(client_message.encode('utf-8'))
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
finally:
|
||||
client_socket.close()
|
||||
print("Connection closed")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue