У меня есть клиент python и сервер python и команды, которые работают отлично. Теперь я хочу создать интерфейс, которому нужна переменная (строка) из файла сервера, и я столкнулся с проблемой.
мой файл client.py
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(),1234))
s.send(bytes("command1","utf-8"))
мой файл server.py:
import socket
while (1):
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),1234))
s.listen(5)
clientsocket, address=s.accept()
msg=clientsocket.recv(1024)
message=msg.decode("utf-8") # I need to pass this to the other file
print(message)
файл, в который мне нужно импортировать строку сообщения из файла server.py:
from tkinter import *
from server import message
def function():
#do some stuff
Menu_Win = Tk()
photo = PhotoImage(file=r"path_to_local_file.png")
Background_Main = Canvas(Menu_Win, width=1980, height=1080, bg="white")
Background_Main.pack()
Background_Main.create_image(0,80, image=photo, anchor='nw')
if message=="command1": #this would be the variable from the server file
function()
Menu_Win.mainloop()
I tried to use **from server import message** but it gives me this error **OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted** and I found out that it gives me this error only when I am continuously running the server.py file and I thinking that the second files when imports, it imports the socket too.
UPDATE1: deleted
UPDATE2: deleted
UPDATE3:
I have found myself a solution, by using threading library and running the echoing server on a thread and the rest of the code (GUI) on another.
import socket
from tkinter import*
import threading
message="dummy variable"
def test_button():
print(message)
root=Tk()
Canvas(root, width=300, height=100).pack()
Button(root,text=("Server"), command=test_button).pack()
def get_command():
while 1:
global message
s=socket.socket()
s.bind((socket.gethostname(),1234))
s.listen(5)
clientsocket, address=s.accept()
msg=clientsocket.recv(1024)
message=msg.decode("utf-8")
t = threading.Thread(target=get_command)
t.start()
def my_mainloop(): #to actually see if the command is updated in real time
print(message)
root.after(1000, my_mainloop)
root.after(1000, my_mainloop)
root.mainloop()
Спасибо за всю поддержку:)