执行Socket.Receive(byte [])将从缓冲区中获取字节,但如果预期的数据相当大,则所有字节可能还没有在缓冲区中,这将给我一个仅部分填充的字节数组.这段代码会确保我读到我想要的所有内容吗?
sock.Receive(message_byte, message_byte.Length, SocketFlags.None);
Run Code Online (Sandbox Code Playgroud)
其中message_byte已被声明为我期望的数据的确切大小.我是否以正确的方式解决这个问题?这个处理的任何东西都不会超过~10 megs,因此在声明字节数组时我不太可能有OutOfMemoryException.
否,Receive返回接收的字节数.你应该妥善处理这个问题.
var needBytes = message_byte.Length;
var receivedBytes;
var totalReceivedBytes = 0;
do
{
receivedBytes = sock.Receive(message_byte, totalReceivedBytes, needBytes, SocketFlags.None);
needBytes -= receivedBytes;
totalReceivedBytes += receivedBytes;
} while (needBytes > 0 && receivedBytes > 0)
Run Code Online (Sandbox Code Playgroud)