Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from socket import socket, AF_INET, SOCK_STREAM, timeout as socket_timeout
- from threading import Thread
- class Client:
- QUIT = "{quit}"
- def __init__(self, name, host="localhost", port=5500, buffer_size=1024, timeout=5):
- self.connected = False
- self.running = False
- self.name = name
- self.addr = (host, port)
- self.buffer_size = buffer_size
- self.socket = socket(AF_INET, SOCK_STREAM)
- self.socket.settimeout(timeout)
- self.socket.connect(self.addr)
- self.connected = True
- self.running = True
- self.send_message(name)
- receive_thread = Thread(target=self.receive)
- receive_thread.start()
- def send_message(self, msg):
- if not self.running:
- raise ConnectionError("Client is not running or connected")
- if msg == self.QUIT:
- self.running = False
- sock = self.socket
- try:
- sock.sendall(msg.encode())
- except Exception as e:
- print("Message send failure in client.send_message()")
- print("Exception: ", e)
- self.running = False
- self.connected = False
- def receive(self):
- sock = self.socket
- incoming_message = None
- while self.running:
- try:
- incoming_message = sock.recv(self.buffer_size).decode().rstrip()
- # the rsplit removes whitespace and newline form the
- # right side of the string, makes testing with
- # netcat easier
- except socket_timeout:
- continue
- except Exception as e:
- print(f"Exception {e} in receive method\nstopping loop")
- break
- if not incoming_message or incoming_message == self.QUIT:
- print("Connections was closed or {quit} was received")
- self.running = False
- break
- print(incoming_message)
- def disconnect(self):
- if self.connected:
- self.send_message(self.QUIT)
- else:
- self.running = False
- if __name__ == "__main__":
- try:
- client = Client("Testclient\n")
- except Exception as e:
- print(e)
- else:
- for n in range(10):
- client.send_message(f"Hello World {n}\n")
- time.sleep(1)
- client.disconnect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement