执行 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/