有没有可能Socket.发送阻塞代码,花很长时间才能完成

本文关键字:长时间 代码 Socket 有可能 | 更新日期: 2023-09-27 18:03:42

我得到了这个Socket。发送代码,我的协议是tcp。

byte[] commandBytes = Encoding.ASCII.GetBytes(command);
int iBytesSent = socket.Send(commandBytes, commandBytes.Length, SocketFlags.None);
Debug.WriteLine("SEND: " + command);

我有超过10,000个命令要发送,每个命令大约100个字符。我在foreach循环中调用Socket.Send用于10,000个命令。

我通知Socket。发送代码会阻塞当前线程,并且需要很长时间才能完成。(调试。WriteLine停止打印到输出控制台

我的问题是

是否可能是因为我发送命令太快而导致流满?

所以它必须等到流可用后再继续发送?

我还通知有一个时刻的套接字。发送阻塞代码5-10秒,然后继续。但随着时间的流逝,5-10秒变成了20-30秒,然后就永远等不下去了。

有没有可能Socket.发送阻塞代码,花很长时间才能完成

是的,Send可能会阻塞,尽管在大多数代码中您很少看到它。如果不想占用线程,可以使用异步套接字IO (BeginSend/EndSendSendAsync)。然而,这并没有使更快——它只是意味着当套接字繁忙时您没有阻塞线程。你是否已经超越了另一端?