擅长:python、mysql、java
<p>recv不需要读取4个字节,它只需要获取最多4个字节的任何内容。因为,正如你所说,你可以打4次recv(1)。你能做到的</p>
<pre><code>def recvall(sock, size):
msg = ''
while len(msg) < size:
part = sock.recv(size-len(msg))
if part == '':
break # the connection is closed
msg += part
return msg
</code></pre>
<p>这将重复调用<code>sock</code>上的<code>recv</code>,直到接收到<code>size</code>字节。如果<code>part == ''</code>套接字是关闭的,那么它将返回关闭之前的任何内容</p>
<p>所以改变</p>
^{pr2}$
<p>到</p>
^{3}$
<p>我建议您将<code>recvall</code>作为类的一个方法,以使事情更干净。在</p>
<hr/>
<p>这是对此处定义的安全套接字类方法的修改:<a href="http://docs.python.org/howto/sockets.html" rel="nofollow">http://docs.python.org/howto/sockets.html</a></p>