amin_sltny
دوشنبه 30 دی 1392, 12:37 عصر
سلام دوستان من دارم یه برنامه می نویسم ه یکسری عکس را انتقال بده به کلاینت و آن ها را ذخیره کنه.
قطعه کد سرورم به این صورته:
byte[] SendingBuffer = null;
FileStream Fs = new FileStream(PathFile, FileMode.Open, FileAccess.Read);
int NoOfPackets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(Fs.L ength) / Convert.ToDouble(BufferFiles.BufferSize)));
int TotalLength = (int)Fs.Length, CurrentPacketLength;
for (int i = 0; i < NoOfPackets; i++)
{
if (TotalLength > BufferFiles.BufferSize)
{
CurrentPacketLength = BufferFiles.BufferSize;
TotalLength = TotalLength - CurrentPacketLength;
}
else
CurrentPacketLength = TotalLength;
SendingBuffer = new byte[CurrentPacketLength];
Fs.Read(SendingBuffer, 0, CurrentPacketLength);
byte[] Keys = null;
if (i == 0)
Keys = Encoding.UTF8.GetBytes((int)SendKey.DownloadsAppIc on + Argumants[0] + "|");
else
Keys = Encoding.UTF8.GetBytes((int)SendKey.WriteByteAppIc on + Argumants[0] + "|" + CurrentPacketLength + "|");
byte[] Send = new byte[SendingBuffer.Length + Keys.Length];
Keys.CopyTo(Send, 0);
SendingBuffer.CopyTo(Send, Keys.Length);
Client.Write(Send);
}
وقطعه کد کلاینتمم به این صورته :
private void ReciveFile(string SaveFileName,byte[] data)
{
byte[] RecData = new byte[BufferFiles.BufferSize];
if (SaveFileName != string.Empty)
{
FileStream Fs = new FileStream(SaveFileName, FileMode.OpenOrCreate, FileAccess.Write);
Fs.Write(data, 0, data.Length);
Fs.Close();
}
}
private void AppendFile(string SaveFileName, byte[] data)
{
byte[] RecData = new byte[BufferFiles.BufferSize];
if (SaveFileName != string.Empty)
{
FileStream Fs = new FileStream(SaveFileName, FileMode.Append, FileAccess.Write);
Fs.Write(data, 0, data.Length);
Fs.Close();
}
}
از این دوتا تابع برای ایجاد فایل و نوشتن ادامه آنها بر بروی فایل استفاده کردم اما مشکل این جاست که تمام فایل به صورت کامل ارسال میشه اما وقتی من اون ار ذخیره می کنم و بازش می کنم با خطای invalid image مواجه می شم و عکس تصویر را به من نشون نمی ده لطفا کمک کنید!!
قطعه کد سرورم به این صورته:
byte[] SendingBuffer = null;
FileStream Fs = new FileStream(PathFile, FileMode.Open, FileAccess.Read);
int NoOfPackets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(Fs.L ength) / Convert.ToDouble(BufferFiles.BufferSize)));
int TotalLength = (int)Fs.Length, CurrentPacketLength;
for (int i = 0; i < NoOfPackets; i++)
{
if (TotalLength > BufferFiles.BufferSize)
{
CurrentPacketLength = BufferFiles.BufferSize;
TotalLength = TotalLength - CurrentPacketLength;
}
else
CurrentPacketLength = TotalLength;
SendingBuffer = new byte[CurrentPacketLength];
Fs.Read(SendingBuffer, 0, CurrentPacketLength);
byte[] Keys = null;
if (i == 0)
Keys = Encoding.UTF8.GetBytes((int)SendKey.DownloadsAppIc on + Argumants[0] + "|");
else
Keys = Encoding.UTF8.GetBytes((int)SendKey.WriteByteAppIc on + Argumants[0] + "|" + CurrentPacketLength + "|");
byte[] Send = new byte[SendingBuffer.Length + Keys.Length];
Keys.CopyTo(Send, 0);
SendingBuffer.CopyTo(Send, Keys.Length);
Client.Write(Send);
}
وقطعه کد کلاینتمم به این صورته :
private void ReciveFile(string SaveFileName,byte[] data)
{
byte[] RecData = new byte[BufferFiles.BufferSize];
if (SaveFileName != string.Empty)
{
FileStream Fs = new FileStream(SaveFileName, FileMode.OpenOrCreate, FileAccess.Write);
Fs.Write(data, 0, data.Length);
Fs.Close();
}
}
private void AppendFile(string SaveFileName, byte[] data)
{
byte[] RecData = new byte[BufferFiles.BufferSize];
if (SaveFileName != string.Empty)
{
FileStream Fs = new FileStream(SaveFileName, FileMode.Append, FileAccess.Write);
Fs.Write(data, 0, data.Length);
Fs.Close();
}
}
از این دوتا تابع برای ایجاد فایل و نوشتن ادامه آنها بر بروی فایل استفاده کردم اما مشکل این جاست که تمام فایل به صورت کامل ارسال میشه اما وقتی من اون ار ذخیره می کنم و بازش می کنم با خطای invalid image مواجه می شم و عکس تصویر را به من نشون نمی ده لطفا کمک کنید!!