Paste ID: 1751662847 — Download raw (.txt)

# -*- coding: utf-8 -*-
import socket
import Tkinter as tk
import time

SERVER_HOST = '147.185.221.19'
SERVER_PORT = 42439

root = tk.Tk()
root.title("Simple Chat")
root.geometry("400x300")

main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

main_frame.rowconfigure(0, weight=1)
main_frame.rowconfigure(1, weight=0)
main_frame.columnconfigure(0, weight=1)

text_frame = tk.Frame(main_frame)
text_frame.grid(row=0, column=0, sticky="nsew")

text_frame.rowconfigure(0, weight=1)
text_frame.columnconfigure(0, weight=1)

scrollbar = tk.Scrollbar(text_frame)
scrollbar.grid(row=0, column=1, sticky="ns")

text_area = tk.Text(
    text_frame, state=tk.DISABLED, yscrollcommand=scrollbar.set,
    wrap=tk.WORD
)
text_area.grid(row=0, column=0, sticky="nsew")
scrollbar.config(command=text_area.yview)

bottom_frame = tk.Frame(main_frame)
bottom_frame.grid(row=1, column=0, sticky="ew", pady=(8, 0))
bottom_frame.columnconfigure(0, weight=1)

entry = tk.Entry(bottom_frame)
entry.grid(row=0, column=0, sticky="ew")

send_button = tk.Button(bottom_frame, text="Send", width=10)
send_button.grid(row=0, column=1, padx=(5, 0))

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.settimeout(0.0)
try:
    client_socket.connect((SERVER_HOST, SERVER_PORT))
except Exception as e:
    print("Connection failed:", e)

def append_message(msg):
    text_area.config(state=tk.NORMAL)
    text_area.insert(tk.END, msg + "\n")
    text_area.config(state=tk.DISABLED)
    text_area.see(tk.END)

def poll_socket():
    try:
        while True:
            data = client_socket.recv(1024)
            if not data:
                break
            msg = data.strip().replace("*Ping!*", "").strip()
            if msg:
                append_message(msg)
    except:
        pass
    root.after(100, poll_socket)

def send_message(event=None):
    msg = entry.get()
    if msg:
        try:
            client_socket.send(msg.encode('utf-8'))
            entry.delete(0, tk.END)
        except:
            append_message("Ошибка отправки.")

send_button.config(command=send_message)
entry.bind("<Return>", send_message)

def send_keepalive():
    try:
        client_socket.send("/")
    except:
        pass
    root.after(5000, send_keepalive)

def on_close():
    try:
        client_socket.close()
    except:
        pass
    root.destroy()

root.protocol("WM_DELETE_WINDOW", on_close)

root.after(100, poll_socket)
root.after(5000, send_keepalive)

root.mainloop()

Create New Paste