0

我在这里有点困惑。通常当我将 Windows telnet 连接到一个简单的回显服务器时,它会回显每一次击键。

现在,由于某种原因,它会堆叠其中的一些并将它们发送到服务器。这是正常行为吗?这种奇怪的不一致有什么原因吗?

例子:

客户:

>>blahblahblah

>>

回声服务器:

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

2 回答 2

1

这取决于双方的缓冲。客户端等待行尾发送可用字符。回显服务器读取,但读取获取可用的内容,并且根据网络和缓冲的随机性,这可能是从 1 个字符到您发送的所有字符。

使用 TCP,一切都可以保证到达那里,但不一定在您发送它的同一时间或相同的块中。

于 2012-09-11T02:40:29.537 回答
1

我很肯定,这取决于你的打字速度。

如果我要编写这样一个交互式客户端,我会将击键排队到一个时间间隔,这个时间间隔对人类来说仍然是即时的,但对于计算机来说实际上很长。如果我的缓冲区已满(真正的高速输入 - 很可能是重定向输入)或发生上述超时后,我将开始发送操作。

通过这样做,我可以通过为每个数据包发送更大的有效负载来减少感觉延迟,从而将感觉延迟减少到 1/n,其中 n 是数据包中的平均击键次数。作为一个积极的副作用,这将(稍微)更好地利用网络资源。

为了验证我的假设,使用剪贴板将一段较长的文本粘贴到 telnet 客户端。

于 2012-09-11T02:40:47.460 回答