C#TcpClient发送方法有时需要太长时间

时间:2015-09-15 17:20:48

标签: c#

如果我发送的数据太快,.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));
            }
        }

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

1 个答案:

答案 0 :(得分:0)

我通过将套接字的.Blocking设置为false来解决问题