扭曲>如何读取长于TCP帧长度的TCP消息,例如来自窗口TCP客户端的1380个字节

时间:2011-07-22 08:38:43

标签: python networking tcp twisted

我正在编写一个扭曲的服务器来读取高达64KB的TCP消息。我发现mt datareciever每1380字节由linereciever类调用,结果证明是Windows客户端的TCP帧大小。有没有办法解决这个问题,而不必循环遍历这些1380字节块?

from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.enterprise.adbapi import ConnectionPool
class CSVReceiver(Protocol):
    def dataReceived(self, line):
        print 'line RX :', len(line) , ' : ' , str(line)

调用dataReceived并打印每1380个字节,例如当我们的服务器发送6KB的TCP消息时为4X。任何避免这种情况的方法,以便我们可以在一次回调中处理整个字符串?

谢谢。

STAN

2 个答案:

答案 0 :(得分:1)

你在python_forum上问了这个问题,我在那里回答你。您希望使用LineReciever,并且希望将MAX_LENGTH设置为更高的数字。

答案 1 :(得分:1)

TCP发送数据流,而不是消息。中间网络可能会将您的流分成任意小块以进行传输。如果您可以控制发生这种情况的整个网络,则tune your Windows clients可以使用不同的窗口大小。但是,您可能还需要专门配置本地路由器以支持Jumbo frames,因为即使以太网默认也不支持超过1500个八位字节的帧。

基本上,对于任何网络,但最简单的例子,你的问题的答案是“不”。但是,你为什么要关心这个? LineReceiver存在的全部原因是为了向您提供整行,而不是担心从TCP流中出现单个任意大小的数据块。