我在这里有点困惑。通常当我将Windows telnet连接到一个简单的echo服务器时,它会响应每次击键。
现在,由于某种原因,它堆叠了一些并将它们发送到服务器。这是正常的行为吗?这种奇怪的不一致是否有任何原因?
示例:
客户端:
>>blahblahblah
>>
回声服务器:
I recieved "b"
I recieved "lahbl"
I recieved "ahbla"
I recieved "h\r\n"
答案 0 :(得分:1)
这取决于双方的缓冲。客户端等待行尾发送可用字符。回显服务器读取,但读取得到可用的内容,并且根据网络的随机性和缓冲,这可能是从1个字符到您发送的所有内容。
使用TCP,一切都可以保证到达目的地,但不一定是在同一时间或在你发送它的同一块中。
答案 1 :(得分:1)
我很肯定,这取决于你的打字速度。
如果我要编写这样一个交互式客户端,我会将按键排队到一个时间间隔,这个时间间隔对于人类来说仍然是即时的,但实际上很长一段时间用于计算机。如果我的缓冲区已满(非常高速输入 - 很可能是重定向输入)或者在上述超时发生后,我就开始发送操作。
通过这样做,我可以通过为每个数据包发送更大的有效负载来减少感觉等待时间,从而将感觉延迟减少1 / n,其中n是数据包中平均击键次数。作为一个积极的副作用,这将(略微)更好地利用网络资源。
要验证我的假设,请使用剪贴板将更长的文本粘贴到telnet客户端。