我有一个继承自 TcpClient 的类。在该课程中,我有一种处理响应的方法。在我调用的那个方法中,我使用 MyBase.GetStream 获取 NetworkStream 并在其上调用 Read。
这很好用,除了第一次调用读取块的时间太长。太长了,我的意思是套接字已经接收到大量数据,但在达到任意限制之前不会读取它。我可以看到它使用数据包嗅探器 WireShark 收到了大量数据。
我已将接收缓冲区设置为少量,并且非常少量(例如只有几个字节)无济于事。我对传递给 read 方法的缓冲区字节数组做了同样的事情,但它仍然延迟。
或者换一种说法。我下载600k。下载需要 5 秒(与服务器的连接速度略高于 100k/秒,这是有道理的)。初始读取调用需要 2-3 秒,并告诉我只有 256 个字节可用(256 是接收缓冲区和我读入的数组的大小)。然后神奇地,其他几十万字节可以在 256 字节块中读取,每个块只需几个进程滴答。使用数据包嗅探器,我知道在最初的 2-3 秒内,套接字收到的不仅仅是 256 个字节。我的连接在 3 秒内不是 0.25k/秒,在 2 秒内不是 400k。
当它们进入时,如何从套接字中获取字节?