gpt4 book ai didi

python - 扭曲的 Int16StringReceiver 小端字节顺序

转载 作者:行者123 更新时间:2023-12-01 04:51:40 25 4
gpt4 key购买 nike

我正在尝试使用 this class由twisted提供来构建我的tcp流。但它们的默认格式是大尾数字节顺序,但我需要以小尾数读取。

所以我做到了:

class Player(basic.Int16StringReceiver):
structFormat = "<H"

def stringReceived(self, packet):
print ':'.join(x.encode('hex') for x in packet)

但由于某种原因,stringReceived很少被调用。客户端和服务器都在同一台机器上,我非常确定客户端确实发送了数据。

那么为什么每次接收数据时都不调用stringReceived

我尝试覆盖dataReceived:

class Player(basic.Int16StringReceiver):
structFormat = "<H"

def dataReceived(self, recd):
print ':'.join(x.encode('hex') for x in recd)

每次客户端发送数据时它都会打印出来。那么为什么 stringReceived 没有被调用呢?也许是错帧?但为什么呢?

最佳答案

客户端应该发送如下消息:

len(string)string

其中 len(string) - 应根据服务器使用的格式进行打包。

这是 IntNStringReceiver.sendString 中发生的情况

 self.transport.write(
pack(self.structFormat, len(string)) + string)

只是为了确认,Int16StringReceiver不是整数发送者/接收者。它的作用是:以上述格式通过传输发送字节消息。覆盖 dataReceived 是个坏主意你这样做的方式。正如您在源代码中看到的那样,这个方法非常复杂。

我的建议:确保客户确实发送 len(string)string ,其中len(string)使用 <H 进行打包格式。

我测试了一个使用与服务器格式不同的客户端,并且服务器变得疯狂。

关于python - 扭曲的 Int16StringReceiver 小端字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com