我在這裏有些困惑。通常,當我將Windows telnet連接到簡單的回顯服務器時,它會迴應每個按鍵。現在Windows遠程登錄客戶端的工作方式如何?
,由於某種原因堆棧他們幾個,並將它們發送到服務器。這是正常的行爲嗎?這種奇怪的不一致是否有任何理由?
實施例:
客戶:
>>blahblahblah
>>
回聲服務器:
I recieved "b"
I recieved "lahbl"
I recieved "ahbla"
I recieved "h\r\n"
我在這裏有些困惑。通常,當我將Windows telnet連接到簡單的回顯服務器時,它會迴應每個按鍵。現在Windows遠程登錄客戶端的工作方式如何?
,由於某種原因堆棧他們幾個,並將它們發送到服務器。這是正常的行爲嗎?這種奇怪的不一致是否有任何理由?
實施例:
客戶:
>>blahblahblah
>>
回聲服務器:
I recieved "b"
I recieved "lahbl"
I recieved "ahbla"
I recieved "h\r\n"
這取決於兩側的緩衝。客戶端等待行尾發送可用字符。回聲服務器讀取,但讀取獲得可用的內容,並且取決於網絡的隨機性和緩衝,這可能是從1個字符到您發送的所有內容。
使用TCP,一切都保證到那裏,但不一定在同一時間或在您送了它同塊。
我相當積極,這取決於你的打字速度。
如果我寫這樣一個互動的客戶,我會排隊按鍵多達這仍然是瞬間的人類的時間間隔,但實際上長的計算機。如果我的緩衝區滿了(真的是高速打字 - 很可能是重定向的輸入)或上述超時發生後,我會開始發送操作。
通過這樣做,我可以通過發送一個更大的有效載荷與每一包,從而降低了氈延遲到1/n,其中n爲鍵擊的平均數量在分組減少感到等待時間。作爲積極的副作用,這可以(稍微)更好地使用網絡資源。
爲了驗證我的假設,使用剪貼板較長一段文字粘貼到Telnet客戶端。
我想知道爲什麼客戶這麼做......我總是覺得很奇怪,立即發送擊鍵。 – itdoesntwork
Windows telnet客戶端(如同大多數telnet客戶端)來自一個時間,其中網絡延遲時間爲幾百毫秒(請考慮:電話調制解調器)。等待完整的線路不是一種選擇,因爲本地回聲和遠程回聲可能會有很大的不同。因此,這是一種盡力而爲的方式來傳遞單個按鍵(echo!),並且仍然保持數據包不會攜帶單字節有效負載(延遲!) –
感謝您的解釋,這就是我一直在尋找的。大部分類似Windows telnet的客戶端都做同樣的事情嗎? – itdoesntwork
通常有一些選項可以控制每個字符是否單獨發送,以及回聲是否在本地完成。而且,telnet幾乎被ssh取代,它加密了流量。 – ddyer
除非已啓用行模式,否則Telnet客戶端不會等待行結束髮送字符。 – EJP