gpt4 book ai didi

python - 检测原始数据的结尾

转载 作者:行者123 更新时间:2023-12-05 09:23:11 24 4
gpt4 key购买 nike

Twisted有两种数据接收模式:Line Mode 和 Raw Mode,我们可以使用 setRawMode()setLineMode() 函数在它们之间切换。

行模式检测行尾,然后调用lineReceived()函数。

来自 Twisted doc :

def rawDataReceived(self, data):

Override this for when raw data is received.

Twisted 如何检测原始数据的结尾,然后调用 rawDataReceived()

编辑:

我会将其添加到以完成我的问题。

我正在使用这个 Qt 函数将数据发送到 Twisted 服务器

qint64 QIODevice::write(const QByteArray & byteArray)

我认为使用 write() 两次意味着 Twisted 服务器也会触发 rawDataReceived() 函数两次。

write( "raw1" );
write( "raw2" );

但是数据是一次性收到的。

最佳答案

你问:

How can Twisted detect the end of a raw data and then call rawDataReceived() ?

简而言之,当你打开raw你要求 Twisted 检测。

...但是让我解释一下

当您谈论连接内部“检测数据结束”时(即,如果您没有在数据结束时关闭连接),您谈论的想法通常被称为作为framing .

在进行应用程序级网络编程时,框架是您必须牢记的主要问题之一,因为大多数(网络)协议(protocol)不保证应用程序的数据框架

令人困惑的是,许多网络协议(protocol)(其中 TCP 是最臭名昭著的协议(protocol)之一)经常但不总是以与传输数据相同的方式向接收方呈现数据(即,就好像它有框架一样,每个 write 都会导致一个 read 发生 - 但在使用缓慢和负载低的情况下)。由于这种可能会起作用可能不会起作用的行为,最佳做法是始终显式添加/内置某种框架。

在 TCP/串行/键盘样式接口(interface)中添加应用程序级帧的最常见方法是使用换行符作为帧结束符,这就是 LineMode是关于。

开启 raw Twisted 中的模式就像在说“我想编写自己的框架”,但我怀疑那真的是你想要的。

相反,您可能想看看其他一些帮助程序 protocol s ( netstringprefixed-message-length ),Twisted 提供将为您进行二进制框架(另请参阅 Twisted 作者 Glyph 的 SO:Fragmented data in Twisted dataRecivied)

关于python - 检测原始数据的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23855133/

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