Здравствуйте. Есть два кода: серверная и клиентская часть (работают через Socket), серверная работает хорошо, клиент тоже работает но почему то только один раз. После повторного нажатия кнопки нужно перезапускать клиент иначе - ошибка:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:/Users/User/PycharmProjects/untitled/Button.py", line 15, in button_click
sock.connect(("localhost", 65042))
OSError: [WinError 10038] Сделана попытка выполнить операцию на объекте, не являющемся сокетом
Клиент:
from tkinter import Tk, Button
from PIL import ImageTk
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
root = Tk()
root.title("Help")
root.attributes('-topmost',True)
image = ImageTk.PhotoImage(file="help.png")
def button_click():
sock.connect(("localhost", 65042))
sock.sendall(bytes(host, "utf-8"))
data = sock.recv(1024)
sock.close()
print(data.decode("utf-8"))
Button(root, image=image, command=button_click).pack()
root.mainloop()
Сервер:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("localhost", 65042))
sock.listen(True)
while True:
conn, addr = sock.accept()
print('Connected by', addr)
data = conn.recv(1024)
conn.sendall(data)
print(data)