# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WCF , Web Services , .Net Remoting >  چگونگی ارتباط سرور با كلاينت ها و بلعكس در شبكه Lan

## Armin060

چطوری بايد بينشون ارتباط برقرار كنم و داده انتقال بدم و دريافت كنم و ...

----------


## hozouri

دوست عزیز انتقال چه داده ای با بانک یا می خوای فایلی رو دریافت کنی .
اگر منظورتان فایل ها باشه که از لحاظ منطقی کلاینت اجازه دسترسی به سرور رو نخواهد داشت مگر اینکه سرور به کلاینت اجازه دسترسی داده باشه یا فایلی Share شده باشه یا مگر بخوای به هک متوسل بشی
ولی فایلی هایی که Share هستند را می توانی استفاده نمایی با روش زیر :

در قسمتی که می خوای مسیر رو بنویسی به صورت زیر بنویسید :

@"//Server\FolderName\Filename

----------


## Armin060

من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم. مقاله آی يا هر چيز ديگه ای نداری؟

----------


## raravaice

> من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم.


این جمله بی معنی هست.
شما باید برنامه برای سوکت های شبکه بنویسی "Socket Programing"

موفق باشید

----------


## Armin060

خوب چطوری...من ميخوام يه برنامه واسه كافی نت و گيم نت با هم بنويسم كه شبيه به گيم نت ها باشه. يعنی يه نفر نام كاربری و پسورد رو وارد ميكنه و بعد از شارژی كه كرده كم ميشه تا خارج بشه. تمامی اطلاعات بايد به سرور انتقال داده بشه. خوب چطوری؟

----------


## Asad.Safari

> من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم. مقاله آی يا هر چيز ديگه ای نداری؟


اگر در مورد Socket programming جستجو میکردی اطلاعات زیادی می تونستی بدست بیاری ,  ولی با این حال
تو این لینک  http://www.codeproject.com/KB/IP/TCPIPChat.aspx
 یه مثال کامل است که ,  یه برنامه چت در LAN رو بررسی کرده است .

موفق باشید

----------


## Armin060

تشكر....
ولی من سورس نميخوام. آموزش ميخوام...!!!
ميخوام بدونم چطوری بايد از از يك كامپيوتر به كامپيوتر ديگه كه با هم از طريق شبكه Lan ارتباط دارند فايل و نوشته های متنی ارسال كرد.

----------


## Asad.Safari

فکر کنم به دردتون بخوره : http://www.barnamenevis.org/sh...d.php?t=121111


موفق باشید

----------


## Armin060

SIR_asad جان. اون تاپيك فقط برای نوشته بود. من فايل هم ميخوام رد و بدل كنم. ولی تاپيك مفيدی بود. هم از شما ممنون و هم از علی H2. بگذريم. كتابی، چيزی. نميشناسيد كه كار من رو راه بندازه؟

----------


## Asad.Safari

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

یک کتاب هم در این مورد هست که اسمش : TCP/IP Sockets in C#‎: Practical Guide for Programmers
http://www.amazon.com/dp/0124660517?...63GGD4A4FF46M&

موفق باشید

----------


## Armin060

اين هم زبان اصلی هست و هم 24$ مايشه.

آقا من اصلا نميخوام ياد بگيرم. فقط به من يك كد بديد كه بتونم باهاش يك فايل رو از يه كامپيوتر بفرستم به يك كامپيوتر ديگه ( با تشكر )

----------


## SMRAH1

سلام

برنامه ي زير يک Sample ساده براي ارسال فايله.ابتدا يک نمونه از برنامه ايجاد کنيد و حالت سرور رو بار کنيد،مسير مورد نظر رو براي ذخيره فايل ارسالي مشخص کنيد و آمادگي براي دريافت فايل رو (با زدن دکمه مربوط) اعلام کنيد.سپس يک نمونه ديگر برنامه را اجرا کنيد و به قسمت کلاينتش بريد و فايل مورد نظر رو آدرس داده و ارسال رو بزنيد تا فايل ارسال بشه.

البته اين برنامه طوري تنظيم شده که روي يک کامپيوتر کار کنه (IP رو عدد 127.0.0.1 دادم) ولي مي تونيد هر IP يا Computer Name موجود در شبکه رو که ميخواهيد وارد کنيد.ملاک در اين برنامه سادگي در خوده برنامه است در نتيجه خالي از اشکالات حرفه اي (و نه دستوري يا ساختاري) نيست (به عبارت ديگه بهتر از اين هم ميشد پيادش کرد).

توضيح اينکه فرآيند ارسال فايل با Text تفاوت چنداني ندارد.فقط اولا بايد ارطلاعات ارسالي رو از فايل بخونيد و اطلاعات دريافتي رو در يک فايل بنوسيد( که در حالت Chat اين اطلاعات رو از يک textBox مي خونديم و در قسمت دريافت کننده در يک textBox ديگه مي نوشتيم).ثانيا به جاي استفاده از متد WriteLine يا Write شي NetworkStream براي ارسال يا دريافت رشته، بايد از متد ها Write و Read اين شي ،البته براي حالتي که آرايه اي از بايت ها را مي خواند و مي نويسد،استفاده کنيم.در هر حال ساختار کلي همان است که در آموزشهايي که لينکش در پست هاي قبل آمده،موجود است.

اگر سئوالي بود در خدمتتان هستم.

موفق باشيد

----------


## Armin060

SMRAH1
 جان نميدونم چجوری از شما تشكر كنم....فقط ميتونم بگم مرسی...اميدوارم بتونم جبران كنم و... به چند تا مشكل كوچيك برخوردم....اين سورس فايل رو از كلاينت ميده به سرور...حالا اگر بخوايم از سرور بديم به كلاينت بايد چی كار كنم... و دو حالت داشته باشه :
1- از سرور به همه كلاينت ها Public
2- از سرور به يك يا چند كلاينت خاص Private

----------


## SMRAH1

سلام

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

در سرور و کلاینت هایت باید سه Thread راه بندازی.یک Thread وظیفه هدایت معمولی فرم رو برعهده داره،یک Thread وظیفه گوش ایستادن (همان که در سرور پیاده شده است) را برعهده دارد و یکی هم وظیفه ارسال فایل رو ،در صورت نیاز،(مانند آن که در کلاینت معرفی شده) را برعهده می گیرد.هر Thread دریافت کننده و ارسال کننده هر لحظه مشغول این امر هستند.به عبارت دیگر این Thread هال در یک چرخه بینهایت قرار دارند که در ابتدا درخواست یک اتصال، در وسط دریافت فایل و در انتها بستن اتصال و باز برگشت به اول حلقه و در خواست اتصال بعدی .... 
نکته ظریف اینکه در صورتی که یک دریافت کننده فایل، درخواستی رو برای دریافت فایل از طرف ارسال کننده داشته باشد،به محض ایجاد یک Socket توسط متد AcceptSocket ،می توان NetworkStream حاصله را در یک Thread مستقل ایجاد و مدیریت دریافت را به آن Thread  واگذار کرده و اجازه دهید Thread جاری با فراخوانی مجدد AcceptSocket ،منتظر یک درخواست ارتباط دیگر بماند.

نکته پایانی اینکه : همانطور که قبلا اشاره شد،دو متد AcceptSocket (در دریافت کننده) و Connect (در ارسال کننده) به محض اجرا ،Thread خود را به حالت هنگ برده تا ارتباط برقرار شود.به همین دلیل برای خروج از برنامه،متد Form.CLose کافی نیست (چون Thread های مستقل بسته نشده و هنوز در حافظه می مانند) و باید از متد Application.Exit استفاده کرد (در این صورت تمام Thread های برنامه بسته می شوند).

امیدوارم مفید بوده باشد.

موفق باشید

----------


## مهران رسا

آیا رویداد آماده ای برای مشخص کردن درخواست های ارسال شده وجود نداره که دیگه نیازی به استفاده از حلقه ها نباشه ؟!!

----------


## SMRAH1

اگر برنامه ای به پورت مورد نظر گوش کنه(TcpListener.Start) ،چنانچه درخواستی بشه،متوجه در خواست شده و درخواست رو می تونه بپذیره،ولی در حالت کلی (اینه برنامه از همه جا بی خبر) یکی بشه بگه پیغام داری،نه نیست یا لااقل من بلد نیستم!

موفق باشی

----------


## Armin060

كسی نميخواد كمك كنه؟
راستی يه مسئله : اون پروژه ای كه آقای SMRAH1 نوشتند، اگر سرور در كامپيوتر سرور و كلاينت در كامپيوتر های كلاينت اجرا بشه مشكلی پيش مياد يا به عبارت ديگه كدش فرق ميكنه؟

----------


## SMRAH1

سلام




> البته اين برنامه طوري تنظيم شده که روي يک کامپيوتر کار کنه (IP رو عدد 127.0.0.1 دادم) ولي مي تونيد هر IP يا Computer Name موجود در شبکه رو که ميخواهيد وارد کنيد.


کافیه خط 42 فایل ClientForm رو ویرایش کنید.

موفق باشید

----------


## Sajjad.Aghapour

دوست عزیز اگه می خواین یاد بگیرید از پایه شروع کنید و یاد بگیرید.(البته من هنوز شروع به یاد گیری نکردم ولی مقاله های خوبی دارم....یکیشو اینجا گذاشتم.)
https://barnamenevis.org/showpo...58&postcount=1

دوتا کتاب زبون اصلی البته رایگان که کتابهای خوبی هم هستن هم دارم.که یکیش همراه با مثال و سورس هست.
یکیشو میتونی از سایت flazx.com با عنوان tcp_ip_sockets_in_c__practical_guide_for_programme  rs_the_practical_guides که سورسش رو ضمیمه می کنم بگیری و یکیش رو هم از سایت ebook4dl با عنوان Programming - Network Programming .NET C Sharp and Visual Basic .NET بگیری.

سورس
http://www.barnamenevis.org/sh...59&postcount=2

موفق باشی.

----------


## Armin060

> کافیه خط 42 فایل ClientForm رو ویرایش کنید.


خوب چه تغييری توش بدم؟

و از sajjadlove هم ممنون

----------


## SMRAH1

به جای 127.0.0.1 عدد IP یا نام کامپیوتر مورد نظر در شبکه رو بگذار!

----------


## Armin060

از كجا به دست بيارم كه الان چه كلاينت هایی دارن از سرور سرويس ميگيرند كه بخوام IP يا نامشون رو به دست بيارم. البته فكر كنم بايد از كلاينت ها به سرور ارسال كرد، چون همه ی كلاينت ها قطعا IP مشخص Server رو می دونند. اين راه درسته؟

----------


## SMRAH1

سلام

برای شمارش (Enumerate) تعداد کامپیوتر های درون شبکه دوستان دیگر که (در دسترسی به اطلاعات شبکه توسط #C ) تخصص دارند باید کمک کنند و از عهده من خارجه (من هنوز از این کارها نکردم!).

موفق باشید

----------


## Armin060

خوب كی وارده؟ يكی كمك كنه...!!!

----------


## s_ahmadneya

آدرس زیر یه برنامه با سورس برای اینکار داره البته با C++‎من تصمیم دارم برنامه برای انتقال صدا و تصویر با س شارپ برای این کار بنویسم لطفا" با هم فکری هم این کار را به پایان برسانیم :متفکر: www.ipmsg.org

----------

