Форум сайта python.su
Здравствуйте. Есть два кода: серверная и клиентская часть (работают через 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)
Отредактировано aaa49400 (Сен. 22, 2019 08:34:57)
Офлайн
aaa49400 ну вы же сокет создаете вне функции а потм вызвав функцию после отправки закрываете сокет. при повторном вызове у вас нет открытого сокета вот вам и ошибка
from tkinter import Tk, Button from PIL import ImageTk import socket host = socket.gethostname() root = Tk() root.title("Help") root.attributes('-topmost',True) image = ImageTk.PhotoImage(file="help.png") def button_click(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 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()
Офлайн