执行 Socket.Receive(byte[]) 将从缓冲区中获取字节,但如果预期数据相当大,则所有字节可能尚未在缓冲区中,这将给我一个仅部分填充的字节数组.这段代码能确保我读到所有我想要的吗?

sock.Receive(message_byte, message_byte.Length, SocketFlags.None);

其中 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)

关于c# - 这段代码会确保我从套接字中读取我想要的所有内容吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7126985/

10-09 14:35