2012-09-11 47 views
0

我在這裏有些困惑。通常,當我將Windows telnet連接到簡單的回顯服務器時,它會迴應每個按鍵。現在Windows遠程登錄客戶端的工作方式如何?

,由於某種原因堆棧他們幾個,並將它們發送到服務器。這是正常的行爲嗎?這種奇怪的不一致是否有任何理由?

實施例:

客戶:

>>blahblahblah 

>> 

回聲服務器:

I recieved "b" 
I recieved "lahbl" 
I recieved "ahbla" 
I recieved "h\r\n" 

回答

1

這取決於兩側的緩衝。客戶端等待行尾發送可用字符。回聲服務器讀取,但讀取獲得可用的內容,並且取決於網絡的隨機性和緩衝,這可能是從1個字符到您發送的所有內容。

使用TCP,一切都保證到那裏,但不一定在同一時間或在您送了它同塊。

+0

感謝您的解釋,這就是我一直在尋找的。大部分類似Windows telnet的客戶端都做同樣的事情嗎? – itdoesntwork

+0

通常有一些選項可以控制每個字符是否單獨發送,以及回聲是否在本地完成。而且,telnet幾乎被ssh取代,它加密了流量。 – ddyer

+0

除非已啓用行模式,否則Telnet客戶端不會等待行結束髮送字符。 – EJP

1

我相當積極,這取決於你的打字速度。

如果我寫這樣一個互動的客戶,我會排隊按鍵多達這仍然是瞬間的人類的時間間隔,但實際上長的計算機。如果我的緩衝區滿了(真的是高速打字 - 很可能是重定向的輸入)或上述超時發生後,我會開始發送操作。

通過這樣做,我可以通過發送一個更大的有效載荷與每一包,從而降低了氈延遲到1/n,其中n爲鍵擊的平均數量在分組減少感到等待時間。作爲積極的副作用,這可以(稍微)更好地使用網絡資源。

爲了驗證我的假設,使用剪貼板較長一段文字粘貼到Telnet客戶端。

+0

我想知道爲什麼客戶這麼做......我總是覺得很奇怪,立即發送擊鍵。 – itdoesntwork

+0

Windows telnet客戶端(如同大多數telnet客戶端)來自一個時間,其中網絡延遲時間爲幾百毫秒(請考慮:電話調制解調器)。等待完整的線路不是一種選擇,因爲本地回聲和遠程回聲可能會有很大的不同。因此,這是一種盡力而爲的方式來傳遞單個按鍵(echo!),並且仍然保持數據包不會攜帶單字節有效負載(延遲!) –