Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Помогите решить проблему с Tkinter и Socket [RSS Feed]

#1 Сен. 22, 2019 07:54:52

aaa49400
Зарегистрирован: 2019-09-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить проблему с Tkinter и Socket

Здравствуйте. Есть два кода: серверная и клиентская часть (работают через 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)

Офлайн

#2 Сен. 22, 2019 21:40:29

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Помогите решить проблему с Tkinter и Socket

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()

Офлайн

  • Начало
  • » GUI
  • » Помогите решить проблему с Tkinter и Socket[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version