Определение адреса клиента в soketserver? Я пишу код сервера для игры в шашки. Тут у меня каждый раз для нового клиента создается новый процесс. Но т к в игре у нас сообщения отсылаются и в ответ на запрос игрока как ему так и его сопернику я решил в объекте игрок еще запоминать его адресс ip чтобы потом можно было отослать ему сообщения(если его соперник походит). Как нам в следующем коде при создании нового процесса с клиентом узнавать его ip-адрес?import pickle
import socket
import socketserver
import threading
import time
class Player:
def __init__(self, id, name, ip_adress):
self.id = id
self.name = name
#состояние 1 - прошел авторизацию но еще не играет, состояние 2 - еще не играет и ждет появление партнера по игре, состояние 3 - в игре
self.state=1
#игровой цвет - нужен для игры
self.color=None
self.ip=ip_adress
#список всех авторизированных игроков
list_of_player=[]
#обработчик запросов
class TCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
encoding = "utf-8"
#инфа что мы получили
data = self.request.recv(1024)
# Дальше мы обрабатываем данные, которые пришли
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
if __name__ == "__main__":
#адрес и порт нашего сервера
HOST, PORT = "localhost", 80
server = ThreadedTCPServer((HOST, PORT), TCPRequestHandler)
# ip, port = server.server_address
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = False
server_thread.start()
#чтобы сервер закрылся только при исключении, например прерывании с клавиатуры
while True:
try:
time.sleep(1)
except:
break
server.shutdown()
server.server_close()

21 Авг 2019 в 06:34
198 +1
0
Ответы
1

В объекте TCPRequestHandler в методе handle, можно получить IP-адрес клиента, подключившегося к серверу, используя атрибут self.client_address. Метод handle будет вызываться для каждого нового подключения и в нем вы можете получить IP-адрес клиента и сохранить его в объект игрока.

Пример:

class TCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
encoding = "utf-8"
# IP-адрес клиента
ip = self.client_address[0]
# порт клиента
port = self.client_address[1]
#инфа что мы получили
data = self.request.recv(1024)
# Дальше мы обрабатываем данные, которые пришли
# В конструкторе нового процесса создаем объект игрока с сохранением IP-адреса
player = Player(id, name, ip)
list_of_player.append(player)

Таким образом, вы сможете сохранить IP-адрес каждого нового клиента и использовать его для отправки сообщений.

20 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир