Untitled

mail@pastecode.io avatarunknown
plain_text
11 days ago
2.4 kB
3
Indexable
Never
import socket
import tkinter as tk
import threading
from tkinter import messagebox

HOST = '0.0.0.0'
PORT = 65432

class ChatServerGUI:
    def __init__(self, master):
        self.master = master
        self.master.title("Chat Application")

        self.messages_frame = tk.Frame(self.master)
        self.scrollbar = tk.Scrollbar(self.messages_frame)
        self.msg_list = tk.Listbox(self.messages_frame, height=20, width=50, yscrollcommand=self.scrollbar.set)
        self.scrollbar.pack(side=tk.RIGHT, fill=tk.BOTH)
        self.msg_list.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        self.messages_frame.pack(pady=10, padx=10)

        # Label, Entry, and Button for sending messages
        self.target_ip_label = tk.Label(self.master, text="Send to IP:")
        self.target_ip_label.pack(pady=5, padx=10)
        self.target_ip_entry = tk.Entry(self.master)
        self.target_ip_entry.pack(pady=5, padx=20, fill=tk.X)

        self.message_label = tk.Label(self.master, text="Message:")
        self.message_label.pack(pady=5, padx=10)
        self.message_entry = tk.Entry(self.master)
        self.message_entry.pack(pady=5, padx=20, fill=tk.X)

        self.send_button = tk.Button(self.master, text="Send", command=self.send_message)
        self.send_button.pack(pady=10)

        self.start_server_thread = threading.Thread(target=self.start_server)
        self.start_server_thread.start()

    def start_server(self):
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.bind((HOST, PORT))
            while True:
                data, addr = s.recvfrom(1024)
                message = f"{addr[0]}: {data.decode()}"
                self.msg_list.insert(tk.END, message)

    def send_message(self):
        target_ip = self.target_ip_entry.get().strip()
        message = self.message_entry.get().strip()

        if not target_ip or not message:
            messagebox.showerror("Error", "Both IP and message fields should be filled!")
            return

        try:
            with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
                s.sendto(message.encode(), (target_ip, PORT))
            self.msg_list.insert(tk.END, f"You to {target_ip}: {message}")
        except Exception as e:
            messagebox.showerror("Error", f"Failed to send the message: {e}")

if __name__ == "__main__":
    root = tk.Tk()
    gui = ChatServerGUI(root)
    root.mainloop()