my-psb/openclassrooms-trainings/chat/client.py

70 lines
1.7 KiB
Python
Raw Normal View History

2018-02-22 21:41:23 +00:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
client.py
Networking test, client-server talking script
"""
import socket, signal, select, sys
2018-02-24 20:54:45 +00:00
MSG_ARG_ERROR = "Usage: client.py hostname port"
if len(sys.argv) < 3:
print(MSG_ARG_ERROR)
sys.exit(1)
HOST = sys.argv[1]
PORT = int(sys.argv[2])
2018-02-22 21:41:23 +00:00
2018-02-25 21:36:13 +00:00
BUFFER = 1024
2018-02-22 21:41:23 +00:00
2018-02-24 14:57:55 +00:00
MSG_SERVER_CONNECTED = "Serveur connecté @{}:{}"
MSG_CLOSE_CONNECTION = "Connexion vers [{}:{}] fermée"
def prompt():
sys.stdout.write('~')
sys.stdout.flush()
def handler(signum, frame):
""" Catch <ctrl+c> signal for clean stop"""
print()
print(MSG_CLOSE_CONNECTION.format(*(SERVER_CONNECTION.getpeername())))
SERVER_CONNECTION.send(b"QUIT")
SERVER_CONNECTION.close()
sys.exit(0)
signal.signal(signal.SIGINT, handler)
2018-02-24 14:57:55 +00:00
SERVER_CONNECTION = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2018-02-26 00:52:52 +00:00
try:
SERVER_CONNECTION.connect((HOST, PORT))
except ConnectionRefusedError as except_detail:
print("ConnectionRefusedError: «{}». Unable to connect".format(except_detail))
sys.exit()
2018-02-24 14:57:55 +00:00
print(MSG_SERVER_CONNECTED.format(HOST, PORT))
2018-02-26 00:52:52 +00:00
while 1:
inputs = [sys.stdin, SERVER_CONNECTION]
rlist, wlist, elist = select.select(inputs, [], [])
2018-02-26 00:52:52 +00:00
for socket in rlist:
if socket == SERVER_CONNECTION: # incomming message
data = socket.recv(BUFFER).decode()
2018-02-26 00:52:52 +00:00
if not data:
print(MSG_CLOSE_CONNECTION.format(HOST, PORT))
2018-02-26 00:52:52 +00:00
sys.exit()
else:
#print data
sys.stdout.write(data)
2018-02-26 00:52:52 +00:00
prompt()
2018-02-22 21:41:23 +00:00
else: # sending message
msg = sys.stdin.readline().encode()
SERVER_CONNECTION.send(msg)
prompt()
2018-02-24 14:57:55 +00:00
SERVER_CONNECTION.close()