Yourmind
@Yourmind
пишу говнокод в перерывах между едой и сериалами

Определение адреса клиента в 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()
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
KodyWiremane
@KodyWiremane
Пони, Debian, LEMP, LAN, любитель
Предположу, что self.client_address в обработчике запросов.

RequestHandler.handle()
This function must do all the work required to service a request. The default implementation does nothing. Several instance attributes are available to it; the request is available as self.request; the client address as self.client_address; and the server instance as self.server, in case it needs access to per-server information.
https://docs.python.org/3.4/library/socketserver.h...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы