簡體   English   中英

扭曲 > 如何從 window TCP 幀長度(例如 1380 字節)讀取 TCP 消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM