TcpClient发送方法有时花费的时间太长
本文关键字:时间 方法 TcpClient | 更新日期: 2023-09-27 18:12:55
如果我发送数据太快。send方法需要很长时间。我这里说的是20毫秒,这不是我的应用程序的选项。是什么原因造成的?我怎样才能避免呢?
一些重现问题的测试代码:测试客户端:
var lol = new TcpClient();
lol.Connect(IPAddress.Parse("123.123.123.123"), 1234);
while (true)
{
var watchy = Stopwatch.StartNew();
lol.Client.Send(new byte[] {123, 34, 34, 98, 45, 87, 34, 78, 45, 76, 45, 23, 154, 146, 1, 1, 1, 11, 66}); // random test data
watchy.Stop();
Console.WriteLine(watchy.Elapsed.TotalMilliseconds);
if (watchy.Elapsed.TotalMilliseconds > 1)
Console.ReadLine();
}
测试服务器:
var listener = new TcpListener(IPAddress.Any, 1234);
listener.Start();
var clients = new List<TcpClient>();
while (true)
{
if (listener.Pending())
{
clients.Add(listener.AcceptTcpClient());
Console.WriteLine("client connected!");
}
foreach (var tcpClient in clients)
{
var data = new byte[tcpClient.Available];
tcpClient.Client.Receive(data);
Console.WriteLine(string.Join(" ", data));
}
}
我认为接收者处理数据的速度不够快。但是,我如何检查我目前是否能够在没有延迟的情况下发送数据?我将发送到多个客户端,这意味着其他客户端将遇到延迟,因为一个客户端无法足够快地处理数据
我通过将.Blocking of socket设置为false来解决这个问题