Отправка байтов через класс, через сокет.По какой-то причине socket.sendall (data) добавляет байты к данным.Делать декодирование на другом конце невозможно - PullRequest
0 голосов
/ 01 февраля 2019

Как говорится в заголовке, всякий раз, когда я пытаюсь отправить данные, socket.sendall (arg) добавляет в данные кучу байтов.Кажется, что это, по крайней мере частично, атрибуты из класса, где определен метод.

Вот соответствующие биты кода:

class Client:
    NICK = ''
    HOST = '127.0.0.1'
    PORT = 65000
    BUFSIZ = 4096
    CONNECTION = None

    def __init__(self, nick_name):
        try:
            self.NICK = nick_name
            ...

    def send_n(self, data):
        print("Sending:", data)
        self.CONNECTION.sendall(data)

class Server:
    def relay_game(self):
        players = self.HANDLER.recv(self.BUFSIZ)
        print("Received:", players)
        print("SERVER SIDE DATA:", players.decode())

def run_handler():
    h = client.Client("HANDLER")
    data = (b'test')
    print("Calling with:", data)
    h.send_n(data)

А вот вывод:

Calling with: b'test'
Sending: b'test'
Received: b'\x80\x03X\x07\x00\x00\x00HANDLERq\x00.test'

Как вы можете видеть, куча байтов уже быладобавляется к «данным» при отправке из функции клиента «send_n» в функцию сервера «relay_game».Причина, по которой я сказал, что части байтов взяты из атрибутов Client, заключается в том, что значение NICK, в данном случае «HANDLER», присутствует в полученной части.

Кто-нибудь знает, почему это происходит?И какое возможное решение было бы решить это?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 01 февраля 2019

Я получил несколько подсказок в другом месте и выяснил это.

Ранее было отправлено маринованное сообщение, содержащее литерал 'HANDLER', которое не было получено сервером.Когда сервер позже начал слушать, оба сообщения были отправлены.

...