我有一个客户端服务器通信,我写了下面的服务器来处理传入的消息,但如果消息比缓冲区大,它会丢失。如果消息大于缓冲区大小,我如何收到整个包?有没有可能,或者我不得不强制客户端(在最大缓冲区大小的请求下发送消息)在缓冲区大小内发送消息?Python的TCP缓冲区溢出
msg =''
while(True):
msg += server.recv(20480)
aSplit = msg.partition("</packet>")
#We received the full message
while(aSplit[ 1 ] == "</packet>"):
messagehandler( aSplit[ 0 ] + "</packet>")
msg = aSplit[ 2 ]
aSplit = msg.partition("</packet>")
当我发送100KB的消息时,我仍然失去了消息的结尾 –
这听起来像是超出了操作系统的缓冲区来存储数据。例如,如果您使用的是TCP连接,则可以发送的数据量是有限的 - 无论您的客户在做什么,它都可以一次读取GB,这仍然会发生。你在发送端需要做的事情是注意'send()'的返回码,它会告诉你发送了多少数据。你的应用程序必须继续发送其余的循环,直到它全部发送完毕。我建议你阅读[Python sockets HOWTO](http://docs.python.org/2/howto/sockets.html)。 – Cartroo
特别是,阅读[使用套接字]一节(http://docs.python.org/2/howto/sockets.html#using-a-socket) - 我引用:*现在我们来到主要的绊脚石的套接字 - send和recv在网络缓冲区上运行。他们不一定处理你交给他们的所有字节(或者期望他们),因为他们的主要焦点是处理网络缓冲区。* – Cartroo