Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import threading
- import tkinter
- class ChatClient:
- def __init__(self):
- self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.client_socket.connect(('127.0.0.1', 5555)) # Change '127.0.0.1' to the server's IP if needed
- self.gui_done = False
- self.running = True
- self.username = self.get_internal_ip()
- gui_thread = threading.Thread(target=self.gui_loop)
- receive_thread = threading.Thread(target=self.receive)
- gui_thread.start()
- receive_thread.start()
- def get_internal_ip(self):
- return socket.gethostbyname(socket.gethostname())
- def gui_loop(self):
- self.root = tkinter.Tk()
- self.root.configure(bg="lightgray")
- self.chat_label = tkinter.Label(self.root, text="Chat:", bg="lightgray")
- self.chat_label.config(font=("Arial", 12))
- self.chat_label.pack(padx=20, pady=5)
- self.text_area = tkinter.Text(self.root)
- self.text_area.pack(padx=20, pady=5)
- self.text_area.config(state='disabled')
- self.msg_label = tkinter.Label(self.root, text="Message:", bg="lightgray")
- self.msg_label.config(font=("Arial", 12))
- self.msg_label.pack(padx=20, pady=5)
- self.input_area = tkinter.Text(self.root, height=3)
- self.input_area.pack(padx=20, pady=5)
- self.send_button = tkinter.Button(self.root, text="Send", command=self.write)
- self.send_button.config(font=("Arial", 12))
- self.send_button.pack(padx=20, pady=5)
- self.gui_done = True
- self.root.protocol("WM_DELETE_WINDOW", self.stop)
- self.root.mainloop()
- def write(self):
- message = f"{self.username}: {self.input_area.get('1.0', 'end')}"
- self.client_socket.send(message.encode('utf-8'))
- self.input_area.delete('1.0', 'end')
- def stop(self):
- self.running = False
- self.root.destroy()
- self.client_socket.close()
- exit(0)
- def receive(self):
- while self.running:
- try:
- message = self.client_socket.recv(1024).decode('utf-8')
- if self.gui_done:
- self.text_area.config(state='normal')
- self.text_area.insert('end', message + '\n')
- self.text_area.yview('end')
- self.text_area.config(state='disabled')
- except ConnectionAbortedError:
- break
- except:
- print("An error occurred.")
- self.client_socket.close()
- break
- if __name__ == "__main__":
- client = ChatClient()
Advertisement
Add Comment
Please, Sign In to add comment