发送流终止字节以指示 TCP 流结束
Sending stream terminating bytes to indicate end of TCP stream
举例来说,我希望通过 TCP 传输某些内容,例如文件共享(读取文件的字节)或使用 CreateProcess or _popen 通过管道的进程输出(stdin、stderr、stdout) .我将无法计算流输出的字节大小。如果我要发送一组特定的特殊字符来指示流已结束由 server/client 解析,这是否实用且安全?
If I were to send a specific set of special characters to indicate the stream is over to be parsed by the server/client, would this be practical and secure?
如果文件的内容可以是任意二进制数据,那么,不,这本身并不是一种“安全”的方式,因为您使用的“特定的特殊字符集”可能出现在某个地方文件,因此它们将通过连接发送,接收方会认为文件已结束,但实际上并未结束。
(我说这不是“安全的”,意思是它不是正确传送文件的保证方式,因为不清楚你所说的“实用”或“安全”是什么意思。从什么安全?是有一些攻击者给你文件来传输,所以他们可以用恶意的方式制作它们?如果你的所有文件都只包含纯文本 ASCII 字符,你可以“安全地”使用非 ASCII 字符作为标记。)
有无数种方法可以制定发送任意数据的协议。您可以先发送长度(尽管随后您需要决定长度使用多少位,或者设计一些协议来发送任意长度的位)。您可以以 512 字节的块为单位发送数据,然后首先发送每个块及其长度。只要该长度为 512 字节,就意味着同一数据的另一个块即将到来。一旦长度小于 512 字节(包括 0),就意味着这是数据的最后一个块。您可以将数据作为带引号的字符串发送,以 "
开头,然后是数据的字节,除了数据中的每个 "
实际上作为 \
然后 [=10] 发送=],数据中的每个\
作为\
和\
发送,然后数据的结尾用"
表示(前面没有\
逃脱它)。
举例来说,我希望通过 TCP 传输某些内容,例如文件共享(读取文件的字节)或使用 CreateProcess or _popen 通过管道的进程输出(stdin、stderr、stdout) .我将无法计算流输出的字节大小。如果我要发送一组特定的特殊字符来指示流已结束由 server/client 解析,这是否实用且安全?
If I were to send a specific set of special characters to indicate the stream is over to be parsed by the server/client, would this be practical and secure?
如果文件的内容可以是任意二进制数据,那么,不,这本身并不是一种“安全”的方式,因为您使用的“特定的特殊字符集”可能出现在某个地方文件,因此它们将通过连接发送,接收方会认为文件已结束,但实际上并未结束。
(我说这不是“安全的”,意思是它不是正确传送文件的保证方式,因为不清楚你所说的“实用”或“安全”是什么意思。从什么安全?是有一些攻击者给你文件来传输,所以他们可以用恶意的方式制作它们?如果你的所有文件都只包含纯文本 ASCII 字符,你可以“安全地”使用非 ASCII 字符作为标记。)
有无数种方法可以制定发送任意数据的协议。您可以先发送长度(尽管随后您需要决定长度使用多少位,或者设计一些协议来发送任意长度的位)。您可以以 512 字节的块为单位发送数据,然后首先发送每个块及其长度。只要该长度为 512 字节,就意味着同一数据的另一个块即将到来。一旦长度小于 512 字节(包括 0),就意味着这是数据的最后一个块。您可以将数据作为带引号的字符串发送,以 "
开头,然后是数据的字节,除了数据中的每个 "
实际上作为 \
然后 [=10] 发送=],数据中的每个\
作为\
和\
发送,然后数据的结尾用"
表示(前面没有\
逃脱它)。