![](/img/trans.png)
[英]how can I parse prefixed length message from TCP stream in twisted python?
[英]Twisted > How to read a TCP message longer than TCP frame-length e.g. 1380 bytes from a window TCP client
我正在編寫一個扭曲的服務器來讀取高達 64KB 的 TCP 消息。 我發現mt datareciever被linereciever class每1380字節調用一次,結果是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 次。 有什么方法可以避免這種情況,以便我們可以在一個回調中處理整個字符串?
謝謝你。
斯坦
你在 python_forum 上問了這個問題,我在那里回答了你。 您想要使用 LineReciever,並且想要將MAX_LENGTH
設置為更大的數字。
TCP 發送數據流,而不是消息。 中間網絡可能會將您的流分成任意小塊進行傳輸。 如果您可以控制發生這種情況的整個網絡,則可以調整 Windows 客戶端以具有不同的 window 大小。 但是您可能還必須專門配置本地路由器以支持巨型幀,因為默認情況下即使以太網也不支持大於 1500 個八位字節的幀。
基本上,對於任何網絡,但最微不足道的例子,你的問題的答案是“不”。 但是,你為什么要關心這個? LineReceiver
存在的全部原因是為您提供整行,而不是您不必擔心來自 TCP stream 的單個任意大小的數據塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.