PDA

View Full Version : ارسال تصویر در سوکت پراگرامینگ



farghabil
سه شنبه 17 دی 1392, 22:22 عصر
آقا ما خیلی نمونه کد دیدیم واسه ارسال عکس تو سوکت پراگرامینگ. در واقع باید عکس تبدیل به بایت بشه و بایت رو ارسال کرد و تو مقصد از بایت به عکس تبدیل شه دوباره... ولی نتیجه نگرفتم یعنی وقتی ارسال میشه اون طرف نمیتونه تبدیل کنه و خطا میده.

اگه ممکنه دوستان راهنمایی کنن از اول

mousa1992
چهارشنبه 18 دی 1392, 00:56 صبح
سلام

شما کدی که برا دریافت و ارسال نوشتید رو قرار بدین و همرا با خطایی که دریافت می کنید تا بشه مشکل رو پیدا کرد !

روند کار به این صورت است که ابتدا شما هر فایلی که داشته باشید به ارایه ای از بایت تبدیل میکنید و بعد با استفاده از کلاس های tcpclient و یا socket و network stream و ... بر روی شبکه ارسال میکنید و طرف دیگه هم داده هارو دریافت میکنه اما ممکنه به فرض مثال شما 1024 بایت رو پشت سر هم فرستاده باشید ولی اون طرف داده هارو در چند پارت کوچکتر دریافت کنید پس با یک دستور read نمیشه همه بایت های فرستاده شده رو یجا خوند و باید از حلقه استفاده کنید ...

کجای کار مشکل دارید

farghabil
جمعه 27 دی 1392, 16:48 عصر
میشه این موضوع رو از اول شما آموزش بدید که یادبگیریم؟ یعنی بیاید مثلا یه عکس رو ارسال کنیم و اون طرف هم عکس رو دریافت کنیم و نمایش بدیم. ممنون. اینجوری خیلی از مشکلات حل میشه

samsam_ninja
جمعه 27 دی 1392, 19:05 عصر
سلام دوست عزیز
میتونی قبل از ارسال سایز فایل رو بگی(بفرستی) !!!
به این کد نگاه کن...

فرستنده :

IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint ipep = new IPEndPoint(ip, 8000);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(ipep);
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms,pictureBox1.Image.RawFor mat);
byte[] data = ms.ToArray();
byte[] size =Encoding.ASCII.GetBytes(data.Length.ToString());
s.Send(size);
s.Receive(size);////// :D
s.Send(data);
s.Close();

گیرنده :

IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint ipep = new IPEndPoint(ip, 8000);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(ipep);
s.Listen(100);
Socket r = s.Accept();
IPEndPoint rec = (IPEndPoint)r.RemoteEndPoint;
byte[] data=new byte[100];
r.Receive(data);
int size = Convert.ToInt32(Encoding.ASCII.GetString(data));
r.Send(data);
data = new byte[size];
r.Receive(data);
MemoryStream ms = new MemoryStream(data);
pictureBox1.Image = Image.FromStream(ms);
r.Close();
s.Close();

samsam_ninja
جمعه 27 دی 1392, 19:10 عصر
آقا تو خط 6 برنامه فرستنده format سر همه نمیدونم چرا جدا میشه...!!!:بامزه:

samsam_ninja
جمعه 27 دی 1392, 19:11 عصر
فقط یه چیزی که فکر کنم بدونی اول باید برنامه گیرنده رو اجرا کنی!

به
s.Listen(100);
توجه کن!