Question: everytime i run my code , I disconect from the server disconect : import socket import threading import tkinter import tkinter.scrolledtext class Client: def _

everytime i run my code , I disconect from the server disconect :
import socket
import threading
import tkinter
import tkinter.scrolledtext
class Client:
def __init__(self, username, hostname, port):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.sock.connect((hostname, port))
except Exception as e:
print(f"Could not connect to server: {e}")
exit(1)
self.username = username
self.gui_done = False
self.running = True
# Start threads for GUI and receiving messages
gui_thread = threading.Thread(target=self.gui_loop)
receive_thread = threading.Thread(target=self.receive)
gui_thread.start()
receive_thread.start()
def gui_loop(self):
# Create main window
self.win = tkinter.Tk()
self.win.configure(bg="lightgray")
self.win.title("Chat Client")
# Chat label
self.chat_label = tkinter.Label(self.win, text="Chat:", bg="lightgray", font=("Arial",12))
self.chat_label.pack(padx=20, pady=5)
# Text area for chat messages
self.text_area = tkinter.scrolledtext.ScrolledText(self.win)
self.text_area.pack(padx=20, pady=5)
self.text_area.config(state="disabled")
# Message label
self.msg_label = tkinter.Label(self.win, text="Message:", bg="lightgray", font=("Arial",12))
self.msg_label.pack(padx=20, pady=5)
# Text input area
self.input_area = tkinter.Text(self.win, height=3)
self.input_area.pack(padx=20, pady=5)
# Send button
self.send_button = tkinter.Button(self.win, text="Send", command=self.write)
self.send_button.pack(padx=20, pady=5)
self.gui_done = True
self.win.protocol("WM_DELETE_WINDOW", self.stop)
self.win.mainloop()
def write(self):
# Send message to server
message = f"{self.username}: {self.input_area.get('1.0', 'end').strip()}"
self.sock.send(message.encode())
self.input_area.delete('1.0', 'end')
def stop(self):
# Gracefully stop the client
self.running = False
self.win.destroy()
self.sock.close()
exit(0)
def receive(self):
# Receive messages from server
while self.running:
try:
message = self.sock.recv(1024).decode()
if message == "Username:":
self.sock.send(self.username.encode())
else:
if self.gui_done:
self.text_area.config(state="normal")
self.text_area.insert('end', message +"
")
self.text_area.yview('end')
self.text_area.config(state="disabled")
except ConnectionAbortedError:
break
except Exception as e:
print(f"Error: {e}")
self.sock.close()
break
if __name__=="__main__":
import sys
if len(sys.argv)<4:
print("Usage: python client.py ")
else:
username = sys.argv[1]
hostname = sys.argv[2]
port = int(sys.argv[3])
Client(username, hostname, port)

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!