从客户端获取二进制数据并将其另存为图像

时间:2014-03-16 04:04:34

标签: c# bytearray localserver

我创建了本地服务器,它应该将图像文件作为二进制数据并将其作为图像保存在硬盘中。

Socket mySocket = myListener.AcceptSocket();

#region Connection Check
if (mySocket.Connected)
{
        ============
    /* Some Code For Displaying Information*/
        ============

    byte[] data = new byte[mySocket.ReceiveBufferSize];
    int i = mySocket.Receive(data, data.Length, 0);

    byteArrayToImage(data); 

    mySocket.Close();
}

byteArrayToImage方法将字节数组转换为图像文件并保存在硬盘驱动器上,这里是代码

public void byteArrayToImage(Byte[] data)
{
    MemoryStream ms = new MemoryStream(data);
    Image img = Image.FromStream(ms);
    img.Save(@"C:\MyPersonalwebServer\ImageData\img.png", ImageFormat.Png);
}

但是我在这里得到了ArgumentException:Image img = Image.FromStream(ms)

以下是data arrayhttp://s43.radikal.ru/i101/1403/78/1913ab884790.png

的一部分

任何想法如何解决? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

以下代码适用于我:

var buffer = new byte[256];
FileStream fs = new FileStream(@"D:\test.png", FileMode.Open);
var ms = new MemoryStream();

int readCtr;
while ((readCtr = fs.Read(buffer, 0, buffer.Length)) > 0) 
{
    ms.Write(buffer, 0, readCtr);
}
Image img = Image.FromStream(ms);
img.Save(@"D:\test2.png", ImageFormat.Png);

您确定从客户端连接发送的数据是完整/干净的吗?

确保从客户端发送的数据在执行Socket.Send()时不附加空字节,或者尝试通过从字节数组的末尾剥离任何空字节来清除服务器端:

buffer = buffer.Where(x => x != (byte)0).ToArray();

您还可以使用标准调试实践/控制台输出,针对服务器端接收的内容手动检查映像的大小。

无论哪种方式,如果字节数组具有有效内容,我不认为你的代码会失败。