PDA

View Full Version : برنامه ای برای مانیتورینگ کلاینت ها



hadis shaeidi
پنج شنبه 07 مهر 1390, 09:07 صبح
من روبرنامه تحت شبکه(کلاینت/سرور)کارمیکنم میخوام سرورتصویرهرکلاینت روداشته باشه یعنی عمل مانیتورانجام بشه

Esmail Solhkhah
پنج شنبه 07 مهر 1390, 16:55 عصر
من روبرنامه تحت شبکه(کلاینت/سرور)کارمیکنم میخوام سرورتصویرهرکلاینت روداشته باشه یعنی عمل مانیتورانجام بشه سلام دوست عزیز

پیشنهاد بنده این بود که شما برنامه سمت کلاینت رو با استفاده از ویندوز سرویس بنویسید

به چند دلیل
اول اینکه شما برای اتوماتیک سازی اجرای برنامه سمت کلاینت نیاز به کار خاصی ندارید
دوم اینکه چون ویندوز سرویس ها عمدتا فاقد GUI هستند پس تو Desktop برنامه شما دیده نخواهد شد

حالا یه توضیح مختصر در رابطه با ویندوز سرویسها

Service های ویندوز به زبان ساده برنامه هایی هستند که معمولا تو فاز لود سیستم عامل لود میشن و عمدتا فاقد GUI هستند
اگه DOS کار کرده باشید میشه گفت یه چیزی تو مایه های TSR
مثلا خود SQL SERVER یه سرویس ویندوز هست(فاقد GUI) که وقتی شما دارید با ManagementStudio مثلا یه دیتابیس میسازید
محیط Management Studio با سرویس SQL SERVER ارتباط برقرار میکنه و نهایتا این سرویس SQL SERVER هست که داره دیتابیس رو برا شما میسازه
در حالی که بنظر میاد این کاره Management Studio هست
برا برنامه نویسی سرویس های ویندوز تو تمپلیتهای Visual Studio شما گزینه Windows Service رو دارید
سرویسهای ویندوز دارای قابلیت Start - Stop- Puase - Resume هستند
(مثال SQL SERVER که آشنا هستید یا سرویس Print Spooler که وظیفه سرویس دهی چاپ رو بر عهده داره)
سرویسهای ویندوز بدلیل عدم وجود GUI اجرای سبکتری دارند و برای برنامه هایی که باید کار سرویس دهی انجام بدن مناسبتر هستند)

این لینک اول جهت آشنایی با ویندوز سرویسها

http://msdn.microsoft.com/en-us/library/d56de412(v=vs.80).aspx (http://msdn.microsoft.com/en-us/library/d56de412%28v=vs.80%29.aspx)

حالا برسیم به بقیه ماجرا

رو کلاینت یه Windows Service بنویسید که توسط یه سوکت به سرور متصل هست
و با دریافت دستور مربوطه از سرور ، از کلاینت یه PrintScreen گرفته و بصورت MemoryStream به سرور ارسال کنه
یا Capture ها رو کش کنه و بعد به سرور ارسال کنه
دقت کنید اولا در این حالت سرویستون باید قابلیت Interact with Desktop رو داشته باشه
و پورتی رو که مشخص کردید برای Firewall تعریف کنید.

در حالت عادی Firewall ها با ترافیکهای خروجی کاری ندارن ولی به ترافیکهای ورودی حساسند.

البته فعلا این مطالبی که میگم کلی هستند و به تدریج اگه مشارکت بشه ریز به ریز بررسی میکنیم
بیس قضیه اینه که شما بتونید از دسکتاپ کامپیوتر کلاینت پرینت اسکرین بگیرید

این کد برای گرفتن عکس از صفحه نمایش

public static Bitmap CaptureScreen()
{
Bitmap screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.Pr imaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(screen);
g.CopyFromScreen(0, 0, 0, 0, screen.Size);
return screen;
}

Esmail Solhkhah
پنج شنبه 07 مهر 1390, 23:02 عصر
برا شروع کار بهتره قدم به قدم پیش بریم

شما اول یه برنامه ساده Windows Application بنویسید و با استفاده از متد بالا کار زیر رو انجام بدید

از صفحه نمایش عکس بگیرید و عکس گرفته شده رو در مسیر اجرایی برنامه ذخیره کنید

اگه موردی بود بگید تا بریم تو جزئیات

اگه نبود ادامه بدیم

hadis shaeidi
جمعه 08 مهر 1390, 18:10 عصر
سلام ببخشیدالان تایپیک روبازکردم کاری که گفتیدالان انجام میدم پس چطورعکس روذخیره کنم که گفتید

Esmail Solhkhah
جمعه 08 مهر 1390, 21:17 عصر
پس چطورعکس روذخیره کنم که گفتیدمتد CaptureScreen از صفحه نمایش عکس گرفته و بصورت Bitmap ارائه میکنه

حالا فقط کافیه شما از متد Save این کلاس استفاده کنید و فایل رو ذخیره کنید

اگه برنامه زیر رو بررسی کنید بنده یه پیکچرباکس گذاشتم که وقتی دکمه "گرفتن عکس" رو بزنید

خاصیت Image این پیکچرباکس رو برابر متد CaptureScreen قرار دادم

بعد با زدن دکمه "ذخیره" اول بررسی کردم که PictureBox خالی نباشه

و بعد با متد Save عکس رو ذخیره کردم

اینجا

Application.StartupPath
هم مسیری هست که برنامه داره از اونجا اجرا میشه

خاصیت Save یه پارامتر هم میگیره که فرمت عکس رو مشخص میکنه


System.Drawing.Imaging.ImageFormat

بنده قرار دادم


System.Drawing.Imaging.ImageFormat.Jpeg

شما میتونید فرمتهای دیگه رو هم مشخص کنید

hadis shaeidi
شنبه 09 مهر 1390, 01:35 صبح
سلام واقعا خسته نباشیدبااین برنامه خوبتون منم انجامش دادم حالابایدچیکارکنم راستی من روهمین برنامه تحت شبکم چت و ارسال فایل وپایگاه داده ولینک دوستان روفعلا انجام دادم.

Esmail Solhkhah
شنبه 09 مهر 1390, 09:34 صبح
راستی من روهمین برنامه تحت شبکم چت و ارسال فایل وپایگاه داده ولینک دوستان روفعلا انجام دادم.

یه کاری که میشه کرد اینه که بگم برنامتون رو بذارید اینجا تا بنده یا دوستان بررسی کنیم.

ولی برا این تاپیک بنده ترجیح میدم قدم به قدم از اول پیش بریم تا بقیه دوستان هم بتونن از مسایلی که تو این تاپیک طرح و بررسی میشه استفاده کنن

البته اگه وقت کافی برا این کار داشته باشید.

احتمالا بنده روزا نتونم زیاد مشارکت کنم ولی معمولا شبا میتونم بحث رو ادامه بدم

hadis shaeidi
شنبه 09 مهر 1390, 09:49 صبح
این پروژه پایانیم هستش فعلا نمیتونم توسایت بزارم چشم قدم به قدم باشماپیش میرم

Esmail Solhkhah
شنبه 09 مهر 1390, 21:55 عصر
گام بعدی اینه که شما بتونید این عکس رو تحت یه سوکت TCP به کامپیوتر مقصد ارسال کنید

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

بصورت خیلی ساده
هر کامپیوتری تو شبکه معمولا دارای یک آدرس IP هست
این آدرس IP تو شبکه به منزله آدرس یه آپارتمان هستش که تشکیل شده از استان و شهر و خیابان و کوچه و شماره ساختمان
برای اینکه ما بتونیم یه پیامی (یا نامه ای) رو به منزل شخصی تو اون آپارتمان بفرستیم علاوه بر آدرس آپارتمان به یه پارامتر دیگه هم نیاز داریم و اون
شماره پلاک منزل مقصد تو آپارتمان هست
آدرس آپارتمان اینجا میشه IP Address و شماره پلاک منزل شخص تو آپارتمان میشه Port
پورت ها رو میشه به دو حالت ورودی و خروجی یا دو طرفه تنظیم کرد
مثل اینکه بگیم به این آدرس منزل فقط میشه نامه فرستاد ولی کسی نمیتونه از اینجا چیزی به بیرون بفرسته
یا بگیم فقط میشه از این منزل نامه فرستاد ولی کسی نمیتونه چیزی به این منزل بفرسته
یا بگیم هم میشه نامه فرستاد و هم گرفت
و این وظیفه فایروال تو شبکس که تو مثال ما میشه نگهبان آپارتمان که رفت و آمد نامه ها رو به و از منزل شما کنترل میکنه
برنامه ما هم طبیعتا از یه آدرس IP + یه Port استفاده خواهد کرد
ترکیب آدرس IP + Port میشه یه سوکت حالا اگه با TCP باشه میشه سوکت TCP و اگه با UDP باشه میشه سوکت UDP

ما از سوکت TCP استفاده خواهیم کرد

البته ببخشید خیلی ساده دارم توضیح میدم چون میخام تا برا همه دوستان منجمله اونایی که تازه با برنامه نویسی و این مباحث آشنا شدن مفید باشه

اگه تا اینجا سوال یا نظر یا پیشنهادی دارید بگید و گرنه ادامه بدیم

hadis shaeidi
شنبه 09 مهر 1390, 22:19 عصر
تااینجامشکلی نیست چون من ارسال فایل ازکلاینت به کلاینت وازسروربه کلاینت وکلاینت به سرورروانجام دادم توسط متدهایwrite

hadis shaeidi
شنبه 09 مهر 1390, 22:21 عصر
به نظرمن بیان یه فرم بزارن توبرنامشون که قبل ازاجرای فرم اصلی باشه وبتونه ipسیستمشون روبدست بیاره یعنی ازهمین جاارتباط سروروکلاینت برقرابشه

hadis shaeidi
شنبه 09 مهر 1390, 22:22 عصر
ببخشیدتایپیک های من کوتاه چون وقتی زیادمینویسم ارسال نمیشه

Esmail Solhkhah
شنبه 09 مهر 1390, 22:26 عصر
به نظرمن بیان یه فرم بزارن توبرنامشون که قبل ازاجرای فرم اصلی باشه وبتونه ipسیستمشون روبدست بیاره یعنی ازهمین جاارتباط سروروکلاینت برقرابشه

خب این هم یه روشه ولی برا این کار شما نیاز به فرم اضافه ندارید ،کافیه تو برنامه سمت کلاینت به سرور وصل بشید (چون آدرس IP سرور رو طبیعتا دارید)

البته تو یه ترد به غیر از ترد اصلی برنامه

hadis shaeidi
شنبه 09 مهر 1390, 22:50 عصر
چون برنامه من یه خورده گستردست وکلاینت هاهم باهم درارتباطندتوسط سروروقتی تویه فرم دیگه loginمیشم ipکه بدست میادواردبرنامه اصلی میشه وازش استفاده میشه

hadis shaeidi
شنبه 09 مهر 1390, 22:56 عصر
راستی شماcapture screenروتویpictureboxذخیره کردیدمن سمت کلاینت اشیاروفرم روتویpanelگذاشتم مگه حتمابایدpicturboxباشه باpanelچطورذخیره کنم؟البته باsavedialogبلدم

hadis shaeidi
یک شنبه 10 مهر 1390, 09:30 صبح
شمادرست میگیدمن هم توبرنامه اصلی ازترداستفاده زیادی کردم اون فرم که میگم فقطip,نام سیستم روبدست میاره ودربرنامه اصلی قرارمیده وارتباطات اونجاشکل میگیرن.لطفاجواب سوال بالاروحتمابدید!

hadis shaeidi
یک شنبه 10 مهر 1390, 09:54 صبح
مشکل سوال بالاحل شداومدمcapturscreenروتومتغیری ازنوع imageذخیره کردم ودردکمهsaveبه جایpicturboxنام متغیری که capturscreenتوش هست گذاشتم بدین ترتیب هم عکس گرفت وهم ذخیره کردچون من توبرنامه کلاینت pictureboxنداشتم.

hadis shaeidi
یک شنبه 10 مهر 1390, 21:49 عصر
مشکل اینه که وقتی بانامcaptureذخیره میکنیددرنتیجه هرعکسی که گرفته میشه فقط به این اسمه وقتی چندکلاینت بازمیکنم وعکس میگیرم چون روهمین نام ذخیره میشن 1عکس به سرورمیره چیکارمیشه کردبانامهای متفاوت ذخیره بشه؟

Esmail Solhkhah
یک شنبه 10 مهر 1390, 23:42 عصر
مشکل اینه که وقتی بانامcaptureذخیره میکنیددرنتیجه هرعکسی که گرفته میشه فقط به این اسمه وقتی چندکلاینت بازمیکنم وعکس میگیرم چون روهمین نام ذخیره میشن 1عکس به سرورمیره چیکارمیشه کردبانامهای متفاوت ذخیره بشه؟

میتونید به صورت زیر عمل کنید

Guid g = Guid.NewGuid();

string FileName = System.Environment.MachineName + "_" + g.ToString() + ".jpg";

یا

string FileName = System.Environment.MachineName + "_" + DateTime.Now.Year.ToString() +
DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() +
DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() +
DateTime.Now.Second.ToString() + ".Jpg";

و برای ذخیره

pictureBox1.Image.Save(Application.StartupPath + "\\" + FileName, System.Drawing.Imaging.ImageFormat.Jpeg);

البته بنده دومی رو پیشنهاد میکنم چون نام فایل شما در هر ثانیه میشه : نام کامپیوتر کلاینت+تاریخ با دقت ثانیه

hadis shaeidi
یک شنبه 10 مهر 1390, 23:51 عصر
مرسی حالابعدش بایدچیکارکردعکس روکه به سمت سرورفرستادیم؟

Esmail Solhkhah
یک شنبه 10 مهر 1390, 23:55 عصر
عکس رو بصورت Stream به سمت سرور ارسال کنید

برا کار با سوکت از چه کتابخانه ای استفاده کردید ؟

hadis shaeidi
دوشنبه 11 مهر 1390, 00:47 صبح
using System.Net;
using System.Net.Sockets;

hadis shaeidi
دوشنبه 11 مهر 1390, 00:50 صبح
منم بصورتstreamفرستادم
BinaryWriter writer = new BinaryWriter(this.stream);

hadis shaeidi
دوشنبه 11 مهر 1390, 00:53 صبح
writer.Write("SENDFILETO" + ":" + this.clientName + "," + fileName);این بقیشه وقتی زیادمینویسم ارسال نمیکنه

hadis shaeidi
دوشنبه 11 مهر 1390, 00:55 صبح
sendfiletoهم نامcaseدرسمت سرورهستش برادریافت فایل وعمل listenکردن وبقیه مراحل...

Esmail Solhkhah
دوشنبه 11 مهر 1390, 10:28 صبح
با استفاده از دستورات زیر عکسی رو که گرفتید تو بافر ذخیره کنید

MemoryStream ms = new MemoryStream();

CaptureScreen().Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] buffer = ms.GetBuffer();

بعد برا ارسال

clientSocket.Send (buffer, buffer.Length, SocketFlags.None);

برا دریافت

ServerSocket.Receive (buffer, buffer.Length, SocketFlags.None);

بعد دریافت بافر رو تو یه MemoryStream ذخیره کنید و با متد

Bitmap.FromStream

عکس رو بازیابی کنید

البته بنده برا کار با سوکتها از IpWorks.Net استفاده میکنم که دردسرهای سوکت دات نت رو نداره

hadis shaeidi
دوشنبه 11 مهر 1390, 11:01 صبح
پس دیگه نیازی به اون کدذخیره سازی که قبلا انجام دادیدنیست؟برادریافت سرورمیشه وبازیابی عکس بیشترتوضیح بدید؟

Esmail Solhkhah
دوشنبه 11 مهر 1390, 11:41 صبح
پس دیگه نیازی به اون کدذخیره سازی که قبلا انجام دادیدنیست؟

خیر اون قسمت که عکس رو بصورت فایل فیزیکی ذخیره میکردیم برا شروع کار بود ، شما از این به بعد باید عکس رو بصورت یه آرایه بایتی ارسال و دریافت کنید


برادریافت سرورمیشه وبازیابی عکس بیشترتوضیح بدید؟

کلاس Socket متدهای برا ارسال و دریافت داده داره

متد Receive برا دریافت داده هست ، این متد 8 حالت مختلف برا دریافت داده داره که یکیش یه آرایه بایتی رو بعنوان بافر استفاده میکنه و بعد دریافت اطلاعات اونا رو تو همون بافر ذخیره میکنه

شما بعد از دریافت اطلاعات و ذخیره اون تو یه آرایه بایتی کافیه اون آرایه رو تو یه MemoryStream ذخیره کنید و بعد کلاس Bitmap رو با این استریم ایجاد کنید


byte[] buffer = new byte[1000000];

S.Receive (buffer, buffer.Length, SocketFlags.None);

MemoryStream ms = new MemoryStream(buffer);

Bitmap CurrentPicture = new Bitmap(ms);

ms.Close();

بنده یه آرایه بایتی ایجاد کردم به عنوان بافر بعد با متد Recive سوکت اطلاعات رو خوندم

بعد یه مموری استریم با این بافر ایجاد کردم و کلاس Bitmap رو با این استریم ایجاد کردم

بعد هم که کارم با این استریم تموم شد اونو کلوز کردم.

hadis shaeidi
دوشنبه 11 مهر 1390, 18:01 عصر
ببخشیدتوارسال ودریافت عکس مشکل دارم یه برنامه ازروپروژه خودم ولی درحدخیلی کمترنوشتم میشه میلتونوبدیدارسال کنم این مشکلوبررسی کنیدبرام

Esmail Solhkhah
دوشنبه 11 مهر 1390, 18:11 عصر
پروفایلم رو بررسی کنید

hadis shaeidi
سه شنبه 12 مهر 1390, 10:44 صبح
خسته نباشید
برنامه روبراتون میل کردم

Esmail Solhkhah
دوشنبه 25 مهر 1390, 13:19 عصر
سلام دوست عزیز

شرمنده یه مدتیه شدیدا گرفتارم ، حجم کارام کم که نمیشه داره زیادم میشه.

شما با توجه به آخرین برنامه بنده ، سمت سرور از کدهای زیر استفاده کنید


private void butSend_Click(object sender, EventArgs e)
{
SendImage();
}


private void SendImage()
{
for (int i = 0; i < ClientList.Count; i++)
{
TcpClient tempClient = (TcpClient)ClientList[i];

if (tempClient.Connected)
{
BinaryFormatter formatter = new BinaryFormatter();


formatter.Serialize(tempClient.GetStream(), CaptureScreen());

}
else
{
ClientList.Remove(tempClient);

i--;
}
}
}

public static Bitmap CaptureScreen()
{
Bitmap screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

Graphics g = Graphics.FromImage(screen);

g.CopyFromScreen(0, 0, 0, 0, screen.Size);

return screen;
}

ضمنا با توجه به اولین تاپیکتون که بنده شرکت کردم فکر کنم عنوانش این بود که یه برنامه کلاینت سرور دارید و میخاید کلاینتها رو مونیتور کنید

رو همین حساب بنده گفتم از ویندوز سرویس استفاه کنید

ولی با توجه به برنامه فعلی شما نیازی به استفاده از ویندوز سرویس نیست چون کلاینتهای شما باید دارای GUI باشن و یه محیط مسنجره پس همون Windows Application گزینه خوبیه

موفق باشید.

hadis shaeidi
دوشنبه 25 مهر 1390, 16:15 عصر
مرسی ازپاسخ خوبتون.
ببخشید شماقبلاگفتیدبایدعکس سمت کلاینت گرفته بشه وسپس به سمت سرورارسال بشه.چون مامیخوایم سرورتصویرهرکلاینتوداشته باشه.
ولی شماداریدالان ازسمت سرورمیفرستیدعکس گرفته شده روبه سمت کلاینت چه نیازی هستش؟
میشه بیشترتوضیح بدید که بااین کدداریدچیکارمیکنیدوبعدش بایدچیکارکرد؟
ببخشیدشرمنده میدونم دارم وقتتونومیگیرم.

hadis shaeidi
دوشنبه 25 مهر 1390, 16:29 عصر
خوب استادمن الان برنامه روتست کردم میادازکلاینت عکس میگره وروخودصفحه مانیتورکلاینت میذاره.
حالابایدبرامانیتورکردن سروراین تصویروداشته باشه؟

Esmail Solhkhah
سه شنبه 26 مهر 1390, 00:11 صبح
بله بنده گفته بودم باید عکس رو از کلاینت بگیرید و بفرستید به سرور، ما هم سمت سرور هم سمت کلاینت قابلیت ارسال دریافت داریم،شما کافی بود کدها رو تغییر بدید.

بنده خودم این کار رو انجام دادم، فکر کنم این برنامه همونی باشه که میخاستید،یه برنامه کلاینت سرور با قابلیت ارسال عکس از کلاینت به سرور با استفاده از Stream

سرور هم عکس گرفته شده رو تو همون مسیر اجرایی برنامه ذخیره میکنه و نام فایل رو برابر IP کلاینت + تاریخ به دقت ثانیه قرار میده ، همون بحثی که قبلا در مورد نام فایل داشتیم.

دقت کنید تو برنامتون (کلاینت) سعی کنید تو یه فاصله زمانی خاصی این کار رو انجام بدید (ارسال عکس) مثلا هر 5 ثانیه

سمت سرور هم برای هر کلاینت یه فولدر همنام اون کلاینت بسازید و عکسهاشو اونجا ذخیره کنید،متد لازمه برای ایجاد نام فایلی که شامل IP کلاینت+زمان باشه تو همین برنامه هست

از همون استفاده کنید برا ساختن فولدر برا هر کلاینت،اگر هم خاستید عکسها رو تو یه دیتابیس لوکال سیو کنید که میشه یه بحث دیگه

بنده قبلا گفته بودم از ویندوز سرویس استفاده کنید چون از روی اولین تاپیکتون که شرکت کردم فکر کردم که شما احتمالا یه برنامه تحت شبکه دارید که میخاید از کلاینتها پس پرده عکس بگیرید

ولی باتوجه به ادامه تاپیک متوجه شدم که برنامه شما یه مسنجره و برا این برنامه، استفاده از ویندوز سرویس صحیح نیست ، سمت کلاینت همون Windows Application باید باشه.

موفق باشید.

hadis shaeidi
سه شنبه 26 مهر 1390, 14:25 عصر
ممنونم ازپاسخ خوبتون.
ببخشیداستادچطوری فولدرایجادکنم براهرکلاینت؟
شمافرمودیداگه خواستم عکسهاروتودیتابیس لوکال سیو کنم یعنی چی؟
میشه کدمربوط به این کارروهم بهم بگید؟
واقعا شرمنده ازبس دارم مزاحم میشم!!!!

Esmail Solhkhah
یک شنبه 01 آبان 1390, 01:23 صبح
شمافرمودیداگه خواستم عکسهاروتودیتابیس لوکال سیو کنم یعنی چی؟دیتابیسهای لوکال زدیادی داریم که برا کارای سبک خوبن، نصبشون راحته چون قابلیت سرویس دهی تحت شبکه ندارن، خود فایل دیتابیس هم معمولا یه فایله

بیشتر برنامه هایی که نیاز به ذخیره سازی دیتا دارن و لوکال اجرا میشن از این تایپ دیتابیسها استفاده میکنن

منجمله : اکسس - SQL CE - SQLite- Vista DB

شما میتونید بجای اینکه عکسهای دریافتی رو بصورت فایل سیو کنید اونا رو تو یکی از این دیتابیسها سیو کنید

فقط دقت کنید سریع حجم دیتابیستون میره بالا، چون اگه فرض بگیریم حجم هر فایل 150K باشه با سیو کردن 10 تا عکس حدودا حجم دیتابیستون میشه 1.5M

پس در این حالت باید سعی کنید در مواقع لازم از کلاینت عکس بگیرید نه همیشه، هر از چندگاهی هم دیتابیستون رو Compact کنید.

بنده شخصا Vista DB رو ترجیح میدم

http://www.vistadb.net/

برا ذخیره و بازیابی عکس تو دیتابیس VistaDB قبلا یه نمونه برنامه نوشتم

http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE/page72

پست 715


ببخشیداستادچطوری فولدرایجادکنم براهرکلاینت؟

سمت سرور از این کد استفاده کنید.

موفق باشید.

hadis shaeidi
دوشنبه 26 دی 1390, 09:01 صبح
سلام
ازپاسخ بسارخوبتون تشکرمیکنم .
موفق باشید.