Untitled
unknown
plain_text
2 years ago
2.4 kB
19
Indexable
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()
Editor is loading...