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

C# 从客户端获取二进制数据并将其保存为图像,c#,bytearray,localserver,C#,Bytearray,Localserver,我创建了本地服务器,它应该将图像文件作为二进制数据,并将它们作为图像保存回硬盘 Socket mySocket = myListener.AcceptSocket(); #region Connection Check if (mySocket.Connected) { ============ /* Some Code For Displaying Information*/ ============ byte[] data = new by

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

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);
}
但我在这里得到了一个例外:
Image img=Image.FromStream(ms)

以下是数据数组的一部分:

有没有办法解决这个问题?
提前感谢。

以下代码适用于我:

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();
您还可以使用标准调试实践/控制台输出,根据服务器端接收的内容手动检查映像的大小


不管怎样,如果字节数组具有有效内容,我认为您的代码不会失败。

堆栈跟踪显示了什么?异常消息是什么?您的缓冲区大小不太可能包含完整的映像。@MrDustpan堆栈跟踪是什么?@SLaks System.Drawing.dll中发生了“System.ArgumentException”类型的未处理异常信息:参数无效。已从闪存应用程序接收数据。首先,我们在二进制和二进制转换的字符串数据上测试了代码,它工作得很好。我还检查了接收和发送的数据大小,它们是相同的。好的。我唯一可以重新创建您得到的异常的时间是如果我的字节数组不正确。。。如果您确定从套接字连接检索到的数据与正在发送的映像的数据完全相同,那么这一定与您读取阵列的方式有关。字节数组的最大大小为“Int32.MaxValue”…您正在检索的图像是否大于此值?我将在Flash应用程序中重新检查图像是否正确转换为二进制,并尽快答复。