Allow for both Windows and Linux to use the same 'client'

This commit is contained in:
Charles Descamps 2025-03-19 18:38:20 -07:00
parent f3c913c97c
commit aad3ecd804

View file

@ -1,6 +1,7 @@
import socket import socket
import sys import sys
import select import select
import os
BUFFER_SIZE = 1024 BUFFER_SIZE = 1024
DEFAULT_HOST = 'localhost' DEFAULT_HOST = 'localhost'
@ -22,29 +23,50 @@ def main():
client_socket.connect((SERVER_HOST, SERVER_PORT)) client_socket.connect((SERVER_HOST, SERVER_PORT))
print(f"Connected to chat server at {SERVER_HOST}:{SERVER_PORT}") print(f"Connected to chat server at {SERVER_HOST}:{SERVER_PORT}")
while True: if os.name == 'nt': # Windows-specific logic
# use select to wait for either server messages or user input import msvcrt
read_sockets, _, _ = select.select([client_socket, sys.stdin], [], []) client_socket.setblocking(False) # Set the socket to non-blocking mode
for sock in read_sockets: while True:
if sock == client_socket: # Check for server messages
# receive message from server try:
server_message = client_socket.recv(BUFFER_SIZE).decode('utf-8') server_message = client_socket.recv(BUFFER_SIZE).decode('utf-8')
if not server_message: if server_message:
print("Disconnected from server") print(f"\n{server_message}")
return print("> ", end="", flush=True)
print(f"\n{server_message}") except BlockingIOError:
print("> ", end="", flush=True) pass
else:
# prompt for user input # Check for user input
client_message = input() if msvcrt.kbhit():
client_message = input("> ")
if client_message.strip() == "%!": if client_message.strip() == "%!":
print("Exiting chat...") print("Exiting chat...")
return break
# send message to server
client_socket.send(client_message.encode('utf-8')) client_socket.send(client_message.encode('utf-8'))
else: # Linux/Unix-specific logic
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
client_socket.send(client_message.encode('utf-8'))
except Exception as e: except Exception as e:
print(f"Error: {e}") print(f"Error: {e}")
finally: finally: