В настоящее время у меня на стороне клиента IP-адрес сервера жестко закодирован, но я хочу, чтобы клиентская часть получала IP-адрес от сервера с помощью широковещательной рассылки (или другим способом).В качестве информации у меня есть следующие вещи:
Сервер / Клиент: UDP-порт: Необходимо заполнить вручную
Я уже пытался добавить пример кода, но это не сработалоиз других ответов StackOverflow.
Это серверная часть:
class Server:
ip = socket.gethostbyname(socket.gethostname())
def __init__(self,host = ip, port=11155):
self.socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
self.socket.setblocking(False)
self.socket.bind((host,port))
self.addr_user = {}
def receive(self):
while True:
try:
data, addr = self.socket.recvfrom(1024)
if not addr in self.addr_user:
user = User(data.decode())
scene = logic.getCurrentScene()
spawner = scene.objects["Spawner"]
avatar = scene.addObject("Avatar", spawner)
avatar.children[0]["Text"] = user.name
avatar["user"] = user
self.addr_user[addr] = user
else:
user = self.addr_user[addr]
data = pickle.loads(data)
user.keyboard.updateState(data[0])
user.mousePosition.updateMousePosition(data[1])
except socket.error:
break
Это клиентская часть:
class Client:
def __init__(self,server_ip ="IPOFSERVER GOES HERE", server_port=11155):
self.socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
self.socket.setblocking(False)
self.serv_addr = (server_ip,server_port)
self.entities = {}
self.main = self.state_sendName
def receive(self):
while True:
try:
data, addr = self.socket.recvfrom(1024)
state = pickle.loads(data)
for k in state:
if not k in self.entities:
scene = logic.getCurrentScene()
spawner = scene.objects["Spawner"]
entity = scene.addObject(k[0], spawner)
entity.children[0]["Text"] = k[1]
self.entities[k] = entity
else:
entity = self.entities[k]
entity.worldPosition = Vector(state[k][0])
entity.worldOrientation = Vector(state[k][1])
getChildren(entity).worldOrientation = Vector(state[k][2])
except socket.error:
break
Я ожидаю, что если клиент получитЗапущенный процесс «Matchmaking» будет запущен путем отправки широковещательного пакета, чтобы сообщить, что «клиент» ищет сервер.Когда сервер получает пакет клиента, сервер должен ответить своим IP-адресом, чтобы его можно было добавить и установить соединение!