我正在尝试使用tcp(NetworkStream)和内存流传输图像。 我试过这段代码(客户端):
BinaryReader breader = new BinaryReader(stream);
int ctBytes = breader.ReadInt32();
MemoryStream ms = new MemoryStream(breader.ReadBytes(ctBytes));
Image img = Image.FromStream(ms);
并且异常发生在第3行。实际上,此代码位于循环内,并且在第一次迭代中不会抛出异常。 服务器代码(如果需要):
BinaryWriter bWriter = new BinaryWriter(writer.BaseStream);
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(buffer, 0, buffer.Length);
bWriter.Write(buffer.Length);
bWriter.Write(buffer);
感谢。
答案 0 :(得分:0)
您需要处置资源:
using(BinaryWriter bWriter = new BinaryWriter(writer.BaseStream))
using(MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(buffer, 0, buffer.Length);
bWriter.Write(buffer.Length);
bWriter.Write(buffer);
}
通过using
子句,资源在块结束时释放。
你必须在客户端做同样的事情。