92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
import socket
|
|
import tkinter as tk
|
|
import threading
|
|
import re
|
|
|
|
|
|
def on_validate(P):
|
|
# Проверка на соответствие шаблону IP-адреса (допускаются промежуточные неполные значения)
|
|
pattern = (
|
|
r"^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){0,3}"
|
|
r"(25[0-5]|2[0-4]\d|[01]?\d\d?)?$"
|
|
)
|
|
return re.match(pattern, P) is not None
|
|
|
|
|
|
class ServerConnectionApp:
|
|
def __init__(self, root):
|
|
self.root = root
|
|
self.root.title("Server Connection App")
|
|
|
|
# GUI setup
|
|
self.setup_gui()
|
|
|
|
# Server connection
|
|
self.client_socket = None
|
|
|
|
def setup_gui(self):
|
|
self.ip_label = tk.Label(self.root, text="IP Address:")
|
|
self.ip_label.grid(row=0, column=0)
|
|
|
|
self.ip_entry = tk.Entry(self.root)
|
|
self.ip_entry.grid(row=0, column=1)
|
|
self.ip_entry.insert(0, "127.0.0.1") # Default IP address (localhost)
|
|
|
|
self.port_label = tk.Label(self.root, text="Port:")
|
|
self.port_label.grid(row=1, column=0)
|
|
|
|
self.port_entry = tk.Entry(self.root)
|
|
self.port_entry.grid(row=1, column=1)
|
|
self.port_entry.insert(0, "12345") # Default port
|
|
|
|
self.connect_button = tk.Button(self.root, text="Connect", command=self.initiate_connection)
|
|
self.connect_button.grid(row=2, column=0, columnspan=2)
|
|
|
|
self.status_label = tk.Label(self.root, text="")
|
|
self.status_label.grid(row=3, column=0, columnspan=2)
|
|
|
|
def initiate_connection(self):
|
|
ip = self.ip_entry.get()
|
|
port = int(self.port_entry.get())
|
|
|
|
# Create a thread to avoid blocking the GUI
|
|
connection_thread = threading.Thread(target=self.connect_to_server, args=(ip, port))
|
|
connection_thread.daemon = True
|
|
connection_thread.start()
|
|
|
|
def connect_to_server(self, ip, port):
|
|
try:
|
|
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
self.client_socket.connect((ip, port))
|
|
self.status_label.config(text="Connected successfully.")
|
|
|
|
# Consume the data and print it to the console
|
|
self.listen_to_server()
|
|
|
|
except Exception as e:
|
|
self.status_label.config(text=f"Connection failed: {e}")
|
|
|
|
def listen_to_server(self):
|
|
try:
|
|
while True:
|
|
data = self.client_socket.recv(1024)
|
|
if data:
|
|
print("Received from server:", data.decode())
|
|
else:
|
|
# Connection is closed
|
|
print("Server has closed the connection.")
|
|
self.client_socket.close()
|
|
break
|
|
except Exception as e:
|
|
print(f"Error while listening to the server: {e}")
|
|
if self.client_socket:
|
|
self.client_socket.close()
|
|
|
|
# Create the Tkinter window
|
|
root = tk.Tk()
|
|
|
|
# Create an instance of the app
|
|
app = ServerConnectionApp(root)
|
|
|
|
# Start the Tkinter main event loop
|
|
root.mainloop() |