首页 > 解决方案 > 通过类,通过套接字发送字节。由于某种原因 socket.sendall(data) 将字节附加到数据中。使另一端无法解码

问题描述

正如标题所说,每当我尝试发送数据时,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”时,一堆字节被添加到“数据”中。我说部分字节来自客户端属性的原因是因为 NICK 值,在这种情况下为“HANDLER”,存在于接收部分中。

有谁知道为什么会这样?解决它的可能解决方案是什么?

谢谢你的时间。

标签: pythonsocketsencodingbyte

解决方案


我在其他地方得到了一些提示并弄清楚了。

之前发送了一条包含文字“HANDLER”的腌制消息,服务器未收到该消息。当服务器随后开始侦听时,两条消息都已发送。


推荐阅读