擅长:python、mysql、java
<p>我假设您使用的是TCP/IP套接字。TCP/IP是一种流协议,对您的数据结构一无所知。如果您在一次<code>send()</code>操作中发送“消息”,则不能保证它会在一次<code>recv()</code>操作中到达。或者一个<code>recv()</code>操作将只接收一条“消息”。在您的例子中,头是一条消息。你知道吗</p>
<p>因此,您必须以某种方式对消息进行分隔,以便接收方能够正确地接收和解析它们。基本上有两种选择:</p>
<ol>
<li>首先发送头的长度(字节数),然后发送头数据。接收器首先读取长度,然后读取那么多字节。你知道吗</li>
<li>在每个标头后发送分隔符。接收器读取报头数据,直到收到分隔符。你知道吗</li>
</ol>
<p>在第一个选项中,您必须考虑如何发送长度。如果使用多字节值,例如32位值,则可能需要在发送之前将其转换为<em>网络字节顺序</em>。见<a href="https://docs.python.org/2/library/socket.html#socket.htonl" rel="nofollow noreferrer">htonl</a>。你知道吗</p>
<p>在第二个选项中,您可以逐字节<code>recv()</code>,但这将非常缓慢。您可能需要使用某种缓冲。你知道吗</p>