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

Как обработать это сокетом?

У меня на сервере вот такой код

import socketserver
import threading
import time

#обработчик запросов
class TCPRequestHandler(socketserver.BaseRequestHandler):
    def handle(self):
        print('hb')

        #инфа что мы получили
        print(self.request.recv(1024))
        print('!!')







class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass



if __name__ == "__main__":
    #адрес и порт нашего сервера
    HOST, PORT = "localhost", 9002
    server = ThreadedTCPServer((HOST, PORT), TCPRequestHandler)
    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()


когда я запускаю вот это на клиенте

import socket
import time

sock = socket.socket()
sock.connect(('localhost', 9002))
a='222'
sock.send(bytes(a, 'utf-8'))
a='333'
sock.send(bytes(a, 'utf-8'))

sock.close()

у меня получается результат
hb
b'222333'
!!


как сделать чтобы результат был
hb
b'222'
!!
hb
b'333'
!!

то есть разделялись сообщения для клиента?
и как нам понимать что клиент вдруг отключился(у нас это будет онлайн игра, и в случае если клиент вдруг взял и вырубил приложение, всмысле не кнопкой "закрыть приложение", где все будет аккуратно обработано, а взял и просто к примеру комп закрыл/вырубил из розетки и соединение исчезло?
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
как сделать чтобы...разделялись сообщения для клиента?

Самому организовывать фрейминг в потоке данных. TCP работает с непрерывным потоком данных, в нём нет встроенного механизма формирования сообщений.

как нам понимать что клиент вдруг отключился

Обмениваться сообщениями по таймеру и регистрировать таймауты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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