PDA

View Full Version : حرفه ای: سورس مدیریت فایل و کنترل دسکتاپ رایانه دیگر با Net Remoting. (دانلودRemoteDesktop And File Transfer)



فرید نجفلو
یک شنبه 05 آذر 1391, 02:10 صبح
سلام
مدتی بود که این برنامه رو نوشته بودم ولی چون وقت نمی کردم تا سر و سامونی بهش بدم (تا غیر خودم کسای دیگه هم سر دربیارن) همینطوری مونده بود که بالاخره امروز (شب!) قسمتم شد

اهداف اصلی برنامه:
مدیریت بصری (شبه Explorer) فایل و عملیات های مربوطه بر روی سیستم راه دور (Remote System)
ارائه امکانات دسترسی و کنترل میز کار راه دور (Remote Desktop) با تمامی امکانات موس و صفحه کلید(تایپ)

از هر بخش می تونید تصویری رو در انتهای مطلب ببینید

تکنولوژی مورد استفاده :
Visual Basic 2010
FrameWork 4 (قابل تغییر به 3.5)
Net Remoting.

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

توضیح مختصر:
پروژه راحل (Solution) شامل سه پروژه به شرح زیر است:

RemotingObject:
این پروژه از نوع کتابخنه ای (Class Library یا DLL) است که وظیفه اصلی پیاده سازی اجرای دستور را به عهده دارد
این پروژه شامل تمامی متد ها و توابعی است که برنامه کلاینت (شرح در پایین) برای رسیدن به اهداف خود دارد است
یک رفرنس از این پروژه در دو پروژه بعدی وجود دارد

RemoteExplorerServer: این پروژه از نوع کنسولی بوده شامل بیش چند خط کد (حیاتی) نیست!
وظیفه این برنامه باز کردن پورت بر روی رایانه هدف (سرور) و ارائه امکانات موجود در RemotingObject به کلاینت (ها) است
(این برنامه بر روی سرور اجرا خواهد شد)

RemoteFileBrowserClient: این پروژه از نوع ویندوزی بوده و وظیفه دارد با اتصال به برنامه RemoteExplorerServer که بروی سرور قرار دارد و با استفاده از امکانت مهیا شده توسط RemotingObject اهداف مورد نظر ما را محقق سازد
(این برنامه بر روی کلاینت اجرا خواهد شد)

----------
توجه داشته باشید ممکن است در هر دو سمت (سرور و کلاینت) نیاز داشته باشید که پورت مورد نظر (که من پیش فرض رو بر روی 1760 قرار دادم) رو در Firewall تنظیم کنید تا امکان ارتباط وجود داشته باشه (این نکته در برنامه سرور گوش زد می شه!)

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

توصیه :
این برنامه ( و تکنولوژی) اون بسیار قدرتمند هست که با کمی کار خیلی بیشتر هم می تونه باشه پس مواظب باشید شیطون گولتون نزنه و یادمون باشه باید به حریم شخصی دیگران احترام گذاشت :چشمک:



95557


95556


توصیه آخرم یادتون نره!

aidin_killerlove
سه شنبه 05 دی 1391, 00:21 صبح
با سلام دستت درد نکنه می شه یه کم درباره کدها بیشتر توضیح بدی؟
اگه کسی بلده لطفا کمک کنه

فرید نجفلو
سه شنبه 05 دی 1391, 00:59 صبح
من توضیح کلی رو دادم
شما موردی بپرس در خدمتم
اگه بخوام همینطوری توضیح بدم میشه توضیح ساختار و مکانیزم ریموتینگ

aidin_killerlove
سه شنبه 05 دی 1391, 14:02 عصر
ببخشید ولی من همون توضیح موردی رو می خوام در حدی که سر کلاس ارائه بدم
ممنون

HAMRAHSOFT.IR
سه شنبه 05 دی 1391, 20:57 عصر
سلام چطوری مشه وقتی برنامه که پنچره داس باز مشه آپی سیستم که باید داخل سیستم کلایت وارد منیم را هم نوشون بده که کابر بهمون بده ؟

فرید نجفلو
چهارشنبه 06 دی 1391, 15:01 عصر
سلام چطوری مشه وقتی برنامه که پنچره داس باز مشه آپی سیستم که باید داخل سیستم کلایت وارد منیم را هم نوشون بده که کابر بهمون بده ؟

معمولا این کار عملی نیست ، چون سیستم معمولا بیشتر از یه آی پی داره مثلا الان سیستم شما تو اینترنت یه آی پی و تو شبکه محلی یه آی پی دیگه داره
به هر حال می تونید از کدهایی مثل این استفاده کنید:
Try
Dim IPs = Net.Dns.GetHostAddresses(Net.Dns.GetHostName)
If IPs.Count <> 0 Then Console.WriteLine("IP(s) Founded For This Host:")
For Each aIP In IPs
Console.WriteLine(aIP.ToString)
Next
Console.WriteLine("")

Catch ex As Exception

End Try


در ضمن باید اضافه کنم که در این برنامه شما فقط محدودو به دادن آی پی نیستید ، می تونید نام کامپیوتر سرور رو وارد کنید که خیلی راحت تر از آی پی هست :

Console.WriteLine("Host Computer Name Is:")
Console.WriteLine(My.Computer.Name) ' Or : Environment.MachineName
Console.WriteLine("")

HAMRAHSOFT.IR
چهارشنبه 06 دی 1391, 18:24 عصر
تشکر

این برنامه در بستر اینترنت جواب نمیده
من برنامه داسی روی سرور واون روی سیتم خودم جواب نداد

فرید نجفلو
چهارشنبه 06 دی 1391, 19:18 عصر
دوست عزیز شرایط در مورد اینترنت فرق می کنه
یک شرط اولیه برای برای ارتباط این دو برنامه (سرور و کلاینت) Ping شدن اون ها برای همدیگه هست
که این شرط تو اینترنت کمتر پیش میاد ، برای مثال اگه هر دو سیستم از یک ISP استفده کنن احتمال اینکه بتونن با همدیگه ارتباط بر قرار کنن (با همون آی پی اینترنتی) زیاده ولی در غیر اینطورت نمیشه گفت
در ضمن تو اینترنت برای این کارا آی پی ثابت مورد بحث قرار می گیره که اینجا جاش نیست
----------------------------------------------------------------
نکته 1:
درمورد برنامه سرور سوء تفاهم پیش نیاد! اون یه برنامه تحت DOS نیست بلکه یه برنامه دات نتی از نوع کنسوله پس اون برای اجرای خودش به نصب بودن فریم ورک احتیاج داره

نکته 2:
بخش مدیریت فایل در اتصال های کم سرعت هم کارکرد نسبتا خوبی داره چون اقدام به تنظیم اندازه بسته (Packet Size) برای خودش می کنه
ولی بخش مدیریت دسکتاپ در اتصال های کم سرعت کند تر عمل می کنه ، برای گرفتن نتیجه بهتر در این شرایط ، کیفیت و پنجره نشان دهنده میز کار رو در کمترین اندازه ممکن قرار بدید
کیفیت که معلومه و در مورد اندازه پنجره باید گفت که برنامه به صورت هوشمند تصویر رو مطابق با اندازه فعلی در سمت کنترل کننده مبادله می کنه (اگه اندازه سرور 1024 در 768 باشه و اندازه پنجره کنترل کننده 800 در 600 تصویر ارسالی از سرور 800 در 600 خواهد بود)

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

نکته 3:
توجه کنید که هدف این برنامه فقط نشان دادن راهی برای کنترل یا مبادله فایل با رایانه دیگر نیست
یه کاربر دیگه این تکنولوژی می تونه به این صورت باشه که شما در یک برنامه پایگاه داده محور لایه کار با پایگاه داده رو بر روی سرور قرار می دید و برنامه های کلاینت از اون به صورت ریموت استفاده می کنن
مزایا:
* نیازی به تعریف کانکشن استریتنگ و در دسترس قرار دادن اون برای همه کاربرا ندارید
* معمولا برنامه کلاینت از اینکه اصلاعات از کجا میاد کاری ندارن و برای مثال فقط یک دیتا تیبل رو می گیرن و نمی دونن از کدوم پایگاه داده و یا کدوم Provider و یا * سرور اومده
* در صورتی که باگی تو این لایه باشه فقط کافیه سرور رو آپدیت کنید
* ترافیک شبکه رو پایین میارید (برای مثال اعتبارسنجی هایی که اطلاعاتی رو از پایگاه داده می خون روی سرور انجام میشه که از دیتابیس لوکال استفاده مکی کنه)
* ...

systam
شنبه 23 دی 1391, 17:36 عصر
سلام
برادر نجفلو
من كافي نت دارم يك برنامه تايمر با توجه به اطلاعات برنامه نويسم درستش كردم هنوز كامل نيست
برنامه شما رو ديدم علاقمه مند شدم مانند ديگر نرم افزار ها شبكه مثل هندي كف و...
برنامه رو براي شما ضميمه كردم
يك مقدار ورودي مبلغ ساعت اينترنت رو از شما دريافت ميكنه
بر حسب ساعت نرخ زمان استفاده رو براي شما نمايش ميده
من ميخوام همون دكمه شروع تايم سيستم رو از لاك در بياره و با دكمه متوقف
سيستم لاك كنه و موس كيبور از كار بيفتن
و صفحه نمايشش حالا يك عكسي قفلي مثل نرم افزار نت ساپورت روي صفحه نمايش داده بشه

ممنون ميشه راهنماييم كنيد

چون بيشتر فعاليت من روي asp به صورت متوسطه اشنايي چنداني با برنامه نويسي تحت ويندوز ندارم
يا علي

فرید نجفلو
یک شنبه 24 دی 1391, 19:10 عصر
سلام
فکر خوبیه و قابل اجرا اما باید خودتون برای نوشتنش تلاش کنید
شما یه فرم ساده بدون کد خاصی گذاشتین ، منظورتون که نوشتن برنامه توسط ما نیست ؟!
اگه این طور باشه برنامه آماده برای کافی نت زیاده!

naderma
چهارشنبه 25 اردیبهشت 1392, 18:25 عصر
سلام
من برنامه کنترل از راه دور رو تست کردم
اما یه مشکل داشت که اونم موقع اجرا محیط دسکتاپ رو بصورت تودرتو نشون می داد

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

فرید نجفلو
پنج شنبه 26 اردیبهشت 1392, 00:21 صبح
سلام
احتمالی که من می دم این هست که شما برنامه رو به صورت کلاینت / سروری اجرا نکردید
یعنی هر دو برنامه کلاینت (ویندوزی) و سرور (کنسولی) روی یه سیستم اجرا کردید ، که در این صورت حالت آینه ای (دو آینه مقابل هم) پیش میاد که طبیعیه
اگه اینطور نیست باید بیشتر توضیح بدید

Sub Zero
دوشنبه 15 مهر 1392, 22:31 عصر
جناب نجفلو در حاضر امکان تست سورستون رو ندارم . فقط یه سوال در مورد امکان remoote desktop .
ایا مثل ریموت دسکتاپ خود ویندوز با کانکت شدن ، سیستم رو برای کاربر فعلی فقل میکنه یا مثل برنامه های حرفه ای واسه این کار (teame viwer یا Ammyy ) امکان همزمان استفاده از سیستم توسط کاربر کلاینت و سرور وجود داره ؟

فرید نجفلو
دوشنبه 15 مهر 1392, 22:54 عصر
سلام
من نمی تونم بگم که برنامه من در حد Team Viewer هست و فعلا خیلی سنگین تر از اونه
منظور من از این برنامه بیشتر نشون دادن نحوه استفاده از Net Remoting. و قدرت و انعطاف اون هست
ولی به هر حال قابلیت کنترل سیستم شبیه به Team Viewer هست و سیستم تبادل فایلش هم شباهت داره
پس کاربر های هر دو طرف همزمان امکان کار با سیستم رو دارن
البته عملیات فایل در سیستم ریموت در پس زمینه انجام میشه و در اون سمت قبل مشاهده نیست

فایل های اجرایی:

Sub Zero
سه شنبه 16 مهر 1392, 14:47 عصر
سلام
من نمی تونم بگم که برنامه من در حد Team Viewer هست و فعلا خیلی سنگین تر از اونه
منظور من از این برنامه بیشتر نشون دادن نحوه استفاده از Net Remoting. و قدرت و انعطاف اون هست
فایل های اجرایی:

منظور من سبک کار برنامتون بود نه چیز دیگه .
واسه یه پروژه به این امکان نیاز داشتم فقط دعا میکردم درگیر کدهای بسیار پیچیده c++ یا زبانهای برنامه نویسی سطح پایین نشم .
به هر حال از لطفتون ممنونم .

فرید نجفلو
سه شنبه 16 مهر 1392, 20:41 عصر
بله ، همونطور که تو تصویر ها (نوت پد) هم توضیح دادم هیچ چیزی خازج از دات نت وجود نداره
همه کد ها سطح بالا هستند پایین ترین سطح کد مربوط میشه به شبیه سازی (انجام) عملیات موس و صفحه کلید در سمت سیستم ریموت که از API استفاده شده (البته اونها هم به صورت مرتب داخل یک کلاس هستن)
بقیه موارد اعم از کار با پورت و ترنسفر اطلاعات کاملا دات نتی هستن

A_2006
سه شنبه 16 مهر 1392, 20:44 عصر
سلام فرید . یک سوال
آیا این برنامه شما فقط جنبه نمایش قدرت رو داره ؟

Sub Zero
سه شنبه 16 مهر 1392, 22:50 عصر
جناب نجفلو برنامه شما رو تست کردم همون چیزی بود که دنبالش بودم . واسه همین سریعا vs2012 رو نصب کردم و کدهای برنامه رو بررسی کردم . کمی هم در مورد .Net Remoting سرچ کردم این لینک (http://secretgeek.net/qad_remoting.asp) هم در فهم بهتر کمکم کرد .

یه سوال واسم پیش اومده . قسمتی از برنامه شما که مربوط به میز کار هست به چه شکلی عمل میکنه .
در مورد این قسمت و نحوه ارتباط سرور و کلاینت همچنین نحوه عملکرد موس و کی بورد در این ارتباط کمی توضیحات تئوریک نیاز دارم .

HAMRAHSOFT.IR
سه شنبه 16 مهر 1392, 23:27 عصر
آقا بستر اینترنت هنوز کار نمیکنه؟

فرید نجفلو
شنبه 20 مهر 1392, 09:52 صبح
سلام فرید . یک سوال
آیا این برنامه شما فقط جنبه نمایش قدرت رو داره ؟

!!!!
من خواستم با یک کار عملی و مفید نشون بدم که با ریموتینگ چه کاراهایی و در چه سطحی میشه کرد
اگه روش کار کنید و حرفه ای تر بشید کارای بهتری هم میشه کرد
اگه نمونه برنامه رو بخوایم مثلا با سوکت نویسی انجام بدیدم (وانایی که آشنایی دارن می دونن که) واقعا کار سخت و پیچیده ای هست

فرید نجفلو
شنبه 20 مهر 1392, 10:02 صبح
آقا بستر اینترنت هنوز کار نمیکنه؟
خیر
این کار نیاز به یک سرور واسط روی اینترنت داره

HAMRAHSOFT.IR
شنبه 20 مهر 1392, 10:12 صبح
سلام
امکان داره بگید با چطوربا سرور واسط میشه این کار کرد
من سرورواسط دارم چطوریباید این کار بکنم

فرید نجفلو
شنبه 20 مهر 1392, 10:25 صبح
جناب نجفلو برنامه شما رو تست کردم همون چیزی بود که دنبالش بودم . واسه همین سریعا vs2012 رو نصب کردم و کدهای برنامه رو بررسی کردم . کمی هم در مورد .Net Remoting سرچ کردم این لینک (http://secretgeek.net/qad_remoting.asp) هم در فهم بهتر کمکم کرد .

یه سوال واسم پیش اومده . قسمتی از برنامه شما که مربوط به میز کار هست به چه شکلی عمل میکنه .
در مورد این قسمت و نحوه ارتباط سرور و کلاینت همچنین نحوه عملکرد موس و کی بورد در این ارتباط کمی توضیحات تئوریک نیاز دارم .

روند کار به صورت مختصر به این صورته:
برنامه پس از دریافت آی پی و پورت از کاربر به سیستم ریموت متصل میشه
برنامه اقدام به درخواست و دریافت یک اسکرین شات می کنه
زمان خواست یک یا همه حالت های زیره:
تایمر
در خواست خود کاربر (فشار یک دکمه)
پس از هر عملیات موس یا صفحه کلید

بعد از دریافت تصویر اون رو به کاربر نمایش می دیم
وقتی کاربر اقدام به تاپیپ می کنه (کد) کلید های مورد نظر به سیستم ریموت ارسال میشه تا فشره شد و رها شدن همون کلید شبیه سازی بشه
در مورد موس هم همین موضوع صادقه فقط یه نکتاتی داره که:
معمولا اندازه (ریزولیشن) صفحه نمایش یا پنجره نمایش با سیستم ریموت متفاوته که باید موقع عملیات موس نطقه هدف به نسبت اندازه دو طرف محاسبه بشه
وسه ارسال عملیات حرکت موس چون معمولا این حرکت دوره تکرار (رویداد) سریعی داره بهتره همه اون نقاط ارسال نشه و با دوره زمانی باشه و همچنین تا زمانی که رویداد حرکت قبلی (ارسال و انجام) کامل نشده در خواست بعدی ارسال نشه ( این متد رو ببینید: MouseMoving)

فرید نجفلو
شنبه 20 مهر 1392, 10:33 صبح
سلام
امکان داره بگید با چطوربا سرور واسط میشه این کار کرد
من سرورواسط دارم چطوریباید این کار بکنم

منظور از سرور واسط اینه که (حداقل در ابتدای امر ) دو طرف یک اتصال با سرور برقرارمی کنن تا همدیگه رو پیدا و انتقال اطلاعات رو انجام بدن (حالا ستقیم یا بازهم با واسطه گری سرور)

یه نکته هم که باید گفت اینه که تو بحث اینترنت مسئله امنیت حیاتی هست
برای مثال تو کد فعلی بعد از باز شده پورت تو سیستم ریموت برای اتصال هیچ پسوردی و امثال اون نیاز نیست مخصوصا تو حالت انتقال فایل عملیات توسط کاربر سمت ریموت قابل کشف نیست و تو پس زمینه انجام میشه که این یعنی یک ایراد مهک (مخصوصا تو اینترنت)

Sub Zero
شنبه 20 مهر 1392, 15:04 عصر
گزینه دیگه که برای رسیدن به این اهداف وجود داره استفاده از WCF هست که داری قدرت و انعطلاف بیشتر و بالطبع پیچیدگی بیشتری هم هست
من دارم روی ساخت Remote Desktop با استفاده از WCF کار میکنم اگه به نتیجه دلخواهم رسیدم حتما سورسشو در اختیار دوستان قرار میدم . برای شروع از این لینک (bobcravens.com/2009/04/create-a-remote-desktop-viewer-using-c-and-wcf/) دارم کمک میگیرم . هرچند پروژه ای که تو لینک هست فقط Desktop Viewer هست اما دنبال این هستم که امکانات دلخواهمو بهش اضافه کنم .