我创建了本地服务器,它应该将图像文件作为二进制数据并将其作为图像保存在硬盘中。
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 array
:http://s43.radikal.ru/i101/1403/78/1913ab884790.png
任何想法如何解决? 提前谢谢。
答案 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();
您还可以使用标准调试实践/控制台输出,针对服务器端接收的内容手动检查映像的大小。
无论哪种方式,如果字节数组具有有效内容,我不认为你的代码会失败。