如果我发送的数据太快,.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));
}
}
我认为接收器无法足够快地处理数据。但是,如何检查我是否能够在没有延迟的情况下发送数据?我发送给多个客户端,这意味着其他客户端将遇到延迟,因为一个客户端无法足够快地处理数据
答案 0 :(得分:0)
我通过将套接字的.Blocking设置为false来解决问题