0% found this document useful (0 votes)
7 views3 pages

Message

Uploaded by

Sonsuty
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views3 pages

Message

Uploaded by

Sonsuty
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

class client_program:

def __init__(self):
client_program.login(self)

self.root = Tk()

self.text_widget = ScrolledText(self.root, state = "disabled", font = ("",


15))
self.text_widget.pack(padx = 5, expand = 5, fill = BOTH)

self.entry_widget = Entry(self.root, font = ("Segoe UI", 20))


self.entry_widget.bind("<Return>", lambda event: self.send_message(event))
self.entry_widget.pack(padx = 5, pady = 10, fill = BOTH)

thread = threading.Thread(target = self.recieve_message)


thread.daemon = True
thread.start()

self.root.bind("<Control-u>", lambda _: self.list_users())


self.root.bind("<Control-Escape>", lambda _: self.exit())

self.root.geometry("1400x800")
self.root.mainloop()

def login(self):
self.login_window = Tk()

self.host_label = Label(self.login_window, text = "host's ip:", font =


("Courier", 30))
self.host_label.place(x = 350, y = 100)

self.host_entry = Entry(self.login_window, font = ("Courier", 30), width =


15, justify = "center")
self.host_entry.place(x = 650, y = 95)

self.port_label = Label(self.login_window, text = "connection port:", font


= ("Courier", 30))
self.port_label.place(x = 325, y = 300)

self.port_entry = Entry(self.login_window, font = ("Courier", 30), width =


10, justify = "center")
self.port_entry.place(x = 750, y = 295)

self.passwd_label = Label(self.login_window, text = "server's password:",


font = ("Courier", 30))
self.passwd_label.place(x = 300, y = 500)

self.passwd_entry = Entry(self.login_window, font = ("Courier", 30), width


= 15, justify = "center")
self.passwd_entry.place(x = 750, y = 495)

self.send_button = Button(self.login_window, text = "save", command =


lambda: client_program.send_data(self), font = ("Courier", 30))
self.send_button.place(x = 700, y = 700, anchor = CENTER)

self.login_window.geometry("1400x800")
self.login_window.mainloop()
def send_data(self):
self.host = self.host_entry.get()
self.port = int(self.port_entry.get())
self.passwd = self.passwd_entry.get()

self.login_window.destroy()

self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


self.server_socket.connect((self.host, self.port))

print(f"\n[+] successful conection to [{self.host}:{self.port}]")

self.server_socket.sendall(self.passwd.encode())

message = self.server_socket.recv(1024).decode()
print(message)

#second tkinter window


self.username_window = Tk()

username_label = Label(self.username_window, text = "username:", font =


("Courier", 30))
username_label.place(x = 325, y = 300)

self.username_entry = Entry(self.username_window, font = ("Courier", 30),


width = 10, justify = "center")
self.username_entry.place(x = 750, y = 295)

send_username_button = Button(self.username_window, text = "save", command


= lambda: client_program.send_username(self), font = ("Courier", 30))
send_username_button.place(x = 700, y = 700, anchor = CENTER)

self.username_window.geometry("1400x800")
self.username_window.mainloop()
#end of second tkiter window

self.server_socket.sendall(self.username.encode())

def send_username(self):
self.username = self.username_entry.get()
self.username_window.destroy()

def list_users(self):
self.server_socket.sendall("!users".encode())

def send_message(self, event):


message_sent = self.entry_widget.get()
self.entry_widget.delete(0, END)

self.server_socket.sendall(f'[{self.username}] {message_sent}'.encode())

self.text_widget.configure(state = "normal")
self.text_widget.insert(END, f'[{self.username}] {message_sent}\n')
self.text_widget.configure(state = "disabled")

def recieve_message(self):
while True:
try:
message = self.server_socket.recv(1024).decode()
self.text_widget.configure(state = "normal")
self.text_widget.insert(END, f'{message} \n')
self.text_widget.configure(state = "disabled")
except:
break

def exit(self):
self.server_socket.sendall(f"\n[!] user {self.username} has disconnected\
n".encode())

self.server_socket.close()

self.root.quit()
self.root.destroy()

if __name__ == "__main__":
user = client_program()

You might also like