PDA

View Full Version : ارسال تصویر بین کلاینت و سرور



samanta3000
جمعه 13 بهمن 1391, 12:21 عصر
سلام دوستای برنامه نویس
من یه برنامه ی چت نوشتم که در ثبت کاربر جدیدش عکس انتخاب میشه
حالا من میخوام این عکس به سرور ارسال بشه تا اونجا بتونم در بانک ذخیره اش کنم
مشکل من اینه که وقتی تصویر رو به بایت تبدیل می کنم دیگه نمیتونم ارسالش کنم و باید حتما به صورت رشته ارسال بشه
متغیر b را هم نمیتونم به رشته تبدیل کنم
با این روش به بایت تبدیلش می کنم:

Dim ms As New MemoryStream
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Dim b() As Byte = ms.GetBuffer


اگه بخوام آدرس عکسو به سرور ارسال کنم و بعد اونجا به بایت تبدیلش کنم باید چه کار کنم؟
آخه اونجا که دیگه pictureboxای نیست که دستور save باشه تا من بتونم توی ms تصویرو ذخیره کنم
کمکم کنید
خیلی توش گیر کردم:گیج:

فرید نجفلو
جمعه 13 بهمن 1391, 13:36 عصر
سلام
روش اتصالتون به سرور رو نگفتید
به احتمال زیاد برنامه با یه کانکشن استرینگ به دیتابیس وصل میشه (که روش خوبی نیست!) ، در این صورت همون بایت ها رو می تونید تو دیتابیس ذخیره کنید
روش انجامش هم تو سایت زیاده و تو امضا (تاپیک) ی من هم می تونید پیدا کنید

samanta3000
جمعه 13 بهمن 1391, 15:48 عصر
من برای اتصالاتم از table adaptor استفاده کردم حالا نمیدونم اسم روشش چیه ولی اصلا از کانکشن استرینگ استفاده نکردم

میدونم حتما باید به صورت بایت ذخیره کنم
مشکل من اینه که چون در ارسال فایلها و متنها، کلمه ای را با& به آن وصل می کنم تا در قسمت سرور متوجه شود که کلاینت چه درخواستی دارد
مثلا اگر در ابتدای متن دریافتی کلمه account باشد یعنی کاربری جدیدی درخواست ثبت کرده است

برای همین نمیتوانم متغیری از نوع بایت را با رشته ای & کنم

samanta3000
یک شنبه 15 بهمن 1391, 19:09 عصر
چرا هیچ کس جوابمو نمیده؟

حداقل اینو جواب بدید لطفا
اگه بخوام آرایه بایتی رو با getstring به رشته تبدیل کنیم و بعد ارسال کنیم
در طرف سرور هم با getbyte اونو به بایت برگردونم به نظرتون مشکلی پیش میاد؟
داده ها ممکنه تغییر کنند؟

روش بهتری برای این کار میدونید؟

arash020
دوشنبه 16 بهمن 1391, 11:23 صبح
سلام(ببخشید به زبان سی شارپه!از وبلاگ http://eaglevb.blogfa.com/ میتونی مبدل کد سی شارپ به وی بی و بالعکس رو دانلود کنی...!)

کد دکمه ارسال فایل دربرنامه سمت client :

try
{
FileStream fs = new FileStream(file_path.Text, FileMode.Open);
byte[] buffer = new byte[fs.Length];
int len = (int)fs.Length;
progressBar1.Maximum = len;
fs.Read(buffer, 0, len);
fs.Close();


BinaryFormatter br = new BinaryFormatter();
TcpClient myclient = new TcpClient(text_IP.Text, 7000);
NetworkStream myns = myclient.GetStream();
br.Serialize(myns, FileName);
while(progressBar1.Value<progressBar1.Maximum)
{
progressBar1.Value++;
}
BinaryWriter mysw = new BinaryWriter(myns);
mysw.Write(buffer);
mysw.Close();
progressBar1.Value = progressBar1.Maximum;
MessageBox.Show(".ارسال شد");
myns.Close();
myclient.Close();

}
catch(Exception ex)
{
MessageBox.Show("خطا" + '\n' + ex.Message.ToString());
}

کد گرفتن فایل در برنامه server :

void File_Receiver()
{
mytcpl = new TcpListener(7000);
mytcpl.Start();
mysocket = mytcpl.AcceptSocket();
myns = new NetworkStream(mysocket);
BinaryFormatter br = new BinaryFormatter();
try
{

object op;

op = br.Deserialize(myns);
bb = new BinaryReader(myns);
byte[] buffer = bb.ReadBytes(5000000);

FileStream fss = new FileStream(ts_path.Text + (string)op, FileMode.CreateNew, FileAccess.Write);
fss.Write(buffer, 0, buffer.Length);
fss.Close();
mytcpl.Stop();
//listBox1.Items.Add("Successfully Saved to: " + ts_path.Text + (string)op);
MessageBox.Show(" فایل ذخیره شد در محل : " + ts_path.Text + (string)op);

if (mysocket.Connected == true)
{
while (true)
{
File_Receiver();
}
}
}
catch(Exception ex)
{
MessageBox.Show("!خطا" + '\n' + ex.Message.ToString());
}
}

موفق باشید