【发布时间】:2014-03-17 16:43:52
【问题描述】:
我编写了一个非常小的应用程序来了解我们本地网络上的 TCP 延迟。这就是我遇到某些包大小的非常奇怪的延迟的地方,到目前为止我可能与我的错误无关。
使用下面的代码,我得到了所有 DataLength 最大 100 kiB 的亚毫秒 ping/pong 时间,但有一个奇怪的例外:如果 DataLength 在大约 1010 和 2400 字节之间,似乎有一个固定的 400ms 延迟添加到我无缘无故地看到了。
这么长的延迟从何而来?
客户端代码
using (var client = new TcpClient())
{
client.Connect(Server); // Server is set somewhere else
var stream = client.GetStream();
var writer = new StreamWriter(stream, Encoding.UTF8) { AutoFlush = true };
var reader = new StreamReader(stream, Encoding.UTF8);
Stopwatch stopwatch = new Stopwatch();
string data = "".PadLeft(DataLength, 'T');
for (int i = 0; i < NumberOfPings; i++)
{
stopwatch.Restart();
writer.WriteLine(data);
reader.ReadLine();
// record elapsed time
}
}
服务器代码
while (true)
{
var client = tcpListener.AcceptTcpClient();
var stream = client.GetStream();
var reader = new StreamReader(stream, Encoding.UTF8);
var writer = new StreamWriter(stream, Encoding.UTF8) { AutoFlush = true };
while (client.Connected)
{
var request = reader.ReadLine();
if (request == null)
break;
writer.WriteLine(request);
}
}
【问题讨论】: