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));
            }
        }

我认为接收者处理数据的速度不够快。但是,我如何检查我目前是否能够在没有延迟的情况下发送数据?我将发送到多个客户端,这意味着其他客户端将遇到延迟,因为一个客户端无法足够快地处理数据

TcpClient发送方法有时花费的时间太长

我通过将.Blocking of socket设置为false来解决这个问题