Advertisement
Guest User

client.py

a guest
Apr 18th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.33 KB | None | 0 0
  1. from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
  2. from threading import Thread
  3. from datetime import datetime
  4. from select import select
  5. from sys import exit
  6. import errno
  7.  
  8.  
  9. class ChatClient():
  10.     def __init__(self):
  11.         self.HEADER_LENGTH = 10
  12.         self.server_addr = ('localhost', 1234)
  13.         self.client_socket = socket(AF_INET, SOCK_STREAM)
  14.         self.client_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
  15.         self.client_socket.connect((self.server_addr[0], self.server_addr[1]))
  16.         self.client_socket.setblocking(False)
  17.  
  18.         self.my_username = input("Username: ")
  19.  
  20.     def run(self):
  21.         username = self.my_username.encode('utf-8')
  22.         username_header = f"{len(username):<{self.HEADER_LENGTH}}".encode('utf-8')
  23.         self.client_socket.send(username_header+ username)
  24.         while True:
  25.             Thread(target=self.send_message).start()
  26.             try:
  27.                 while True:
  28.                     self.username_header = self.client_socket.recv(self.HEADER_LENGTH)
  29.                     Thread(target=self.receive_message).start()
  30.                     if not len(self.username_header):
  31.                         print('Connection closed by the server')
  32.                         exit()
  33.  
  34.  
  35.             except IOError as e:
  36.                 if e.errno != errno.EAGAIN and e.errno != errno.EWOULDBLOCK:
  37.                     print(f"Reading error: {str(e)}")
  38.                     exit()
  39.             except Exception as e:
  40.                 print(f"Reading error: {str(e)}")
  41.                 exit()
  42.                 continue
  43.     def send_message(self):
  44.         message = input(f'{self.my_username}> ')
  45.         if message:
  46.             message = message.encode('utf-8')
  47.             self.message_header = f"{len(message):<{self.HEADER_LENGTH}}".encode('utf-8')
  48.             self.client_socket.send(self.message_header + message)
  49.     def receive_message(self):
  50.         username_lenght = int(self.username_header.decode('utf-8').strip())
  51.         username = self.client_socket.recv(username_lenght).decode('utf-8')
  52.         message_header = self.client_socket.recv(self.HEADER_LENGTH)
  53.         message_lenght = int(message_header.decode('utf-8').strip())
  54.         message = self.client_socket.recv(message_lenght).decode('utf-8')
  55.         print(f"{username}> {message}")
  56.  
  57. c = ChatClient().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement