Проблема с подключением (socket python)
Пытаюсь написать автообновление программы, но появились проблемы с подключением. Проблема заключается в том что по статическому айпи, в отличии от динамического, ко мне не могут подключиться, а мне нужен именно статичный чтобы постоянно всем не скидывать свой динамический айпишник, порты открыты(открывал сам в веб-конфигураторе роутера)
Сам код(Тут только часть с сокетами потому что всё остальное нормально работает):
Server:
import socket
import threading
import os
class Parser():
def __init__(self):
# If Is Server Variable Not Exists
try:
if not self.is_server:
# Creating Is Server Variable
self.is_server = False
# Creating Socket
self.sock = socket.socket()
# Creating Server For AutoUpdate Work
self.create_server()
except:
# Creating Is Server Variable
self.is_server = False
# Creating Socket
self.sock = socket.socket()
# Creating Server For AutoUpdate Work
self.create_server()
def create_server(self):
# Trying To Create Server
try:
# Connecting Server To PC Ip
self.sock.bind(("", 25565))
# Listening For Connections
self.sock.listen(3)
# Excepting Error
except:
if self.debug:
print("\nError Happend! Retrying To Create Server..\n")
# Closing Socket Connection
self.sock.close()
# Retrying Create Server
self.create_server()
# If Debug
if self.debug:
print("\nCreated Server! Starting Parser..\n")
# Creating Variable To Say That We Already Created Server
self.is_server = True
# Creating Thread For Recieve Data
data_recieve = threading.Thread(target=self.recieve_data, name="Data Recieve")
# Starting Thread
data_recieve.start()
def recieve_data(self):
while True:
if self.is_server:
conn, addr = self.sock.accept()
recieved_data = conn.recv(1024)
if recieved_data.decode("utf-8") == "REQUEST_VERSION_TYPE":
if self.__version__["Type"] != "Beta" and self.__version__["Type"] != "Alpha":
conn.sendall(str(self.__version__["Type"]).encode("utf-8"))
else:
conn.sendall("Disaccepted".encode("utf-8"))
elif recieved_data.decode("utf-8") == "REQUEST_VERSION_VALUE":
if self.__version__["Type"] != "Beta" and self.__version__["Type"] != "Alpha":
conn.sendall(str(self.__version__["Value"]).encode("utf-8"))
else:
conn.sendall("Disaccepted".encode("utf-8"))
elif recieved_data.decode("utf-8") == "REQUEST_UPDATE":
if self.__version__["Type"] != "Beta" and self.__version__["Type"] != "Alpha":
bytes = open("updated version/parser.py", "r+b").read()
conn.sendall(bytes)
else:
conn.sendall("Disaccepted".encode("utf-8"))
if __name__ == "__main__":
Parser()
Client:
import socket
import os
class Parser():
def __init__(self):
# Getting Server Version
server_version = make_request("REQUEST_VERSION_VALUE", ("", 25565)).decode("utf-8")
# Checking For Accept And Old Version
if server_version != "Disaccepted":
if float(server_version) > self.__version__["Value"]:
print("New Version Found! Updating..\n")
# Getting Updated File
updated_bytes = make_request("REQUEST_UPDATE", ("", 25565))
print(updated_bytes)
# Removing Old File
os.remove(__file__)
# Creating Updated File
with open("parser.py", "w+b") as updated_file:
updated_file.write(updated_bytes)
updated_file.close()
# Clearing Console
os.system("cls")
# Running Updated File
os.system("parser.py")
else:
print("Already Updated!")
else:
print("Request Has Been Disaccepted!")
if __name__ == "__main__":
Parser()
(Айпи в коде сам убрал, так там рабочий стоял)
Функция make_request:
def make_request(text: str, ip):
sock = socket.socket()
sock.connect(ip)
sock.sendall(text.encode("utf-8"))
recieved = sock.recv(15024)
sock.close()
return recieved
Как можно решить эту проблему?