PDA

View Full Version : چگونگی ارتباط سرور با كلاينت ها و بلعكس در شبكه Lan



Armin060
دوشنبه 06 آبان 1387, 15:20 عصر
چطوری بايد بينشون ارتباط برقرار كنم و داده انتقال بدم و دريافت كنم و ...

hozouri
دوشنبه 06 آبان 1387, 16:23 عصر
دوست عزیز انتقال چه داده ای با بانک یا می خوای فایلی رو دریافت کنی .
اگر منظورتان فایل ها باشه که از لحاظ منطقی کلاینت اجازه دسترسی به سرور رو نخواهد داشت مگر اینکه سرور به کلاینت اجازه دسترسی داده باشه یا فایلی Share شده باشه یا مگر بخوای به هک متوسل بشی
ولی فایلی هایی که Share هستند را می توانی استفاده نمایی با روش زیر :

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


@"//Server\FolderName\Filename

Armin060
دوشنبه 06 آبان 1387, 17:32 عصر
من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم. مقاله آی يا هر چيز ديگه ای نداری؟

raravaice
دوشنبه 06 آبان 1387, 17:45 عصر
من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم.

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

موفق باشید

Armin060
دوشنبه 06 آبان 1387, 18:00 عصر
خوب چطوری...من ميخوام يه برنامه واسه كافی نت و گيم نت با هم بنويسم كه شبيه به گيم نت ها باشه. يعنی يه نفر نام كاربری و پسورد رو وارد ميكنه و بعد از شارژی كه كرده كم ميشه تا خارج بشه. تمامی اطلاعات بايد به سرور انتقال داده بشه. خوب چطوری؟

Asad.Safari
سه شنبه 07 آبان 1387, 13:50 عصر
من اصلا بلد نيستم چطوری بايد يه برنامه واسه Lan بنويسم. مقاله آی يا هر چيز ديگه ای نداری؟

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

موفق باشید

Armin060
سه شنبه 07 آبان 1387, 15:58 عصر
تشكر....
ولی من سورس نميخوام. آموزش ميخوام...!!!
ميخوام بدونم چطوری بايد از از يك كامپيوتر به كامپيوتر ديگه كه با هم از طريق شبكه Lan ارتباط دارند فايل و نوشته های متنی ارسال كرد.

Asad.Safari
سه شنبه 07 آبان 1387, 16:12 عصر
فکر کنم به دردتون بخوره : http://www.barnamenevis.org/forum/showthread.php?t=121111


موفق باشید

Armin060
سه شنبه 07 آبان 1387, 17:30 عصر
SIR_asad (http://www.barnamenevis.org/forum/member.php?u=5548) جان. اون تاپيك فقط برای نوشته بود. من فايل هم ميخوام رد و بدل كنم. ولی تاپيك مفيدی بود. هم از شما ممنون و هم از علی H2. بگذريم. كتابی، چيزی. نميشناسيد كه كار من رو راه بندازه؟

Asad.Safari
سه شنبه 07 آبان 1387, 19:44 عصر
خدمت شما عرض شود که اگر در اینترنت جستجو کنید , مطالب زیادی رو پیدا خواهین کرد و اگر با سمپل ها کار کنید , یاد میگیرید .

یک کتاب هم در این مورد هست که اسمش : TCP/IP Sockets in C#: Practical Guide for Programmers
http://www.amazon.com/dp/0124660517?tag=flazx-20&camp=14573&creative=327641&linkCode=as1&creativeASIN=0124660517&adid=0WKEHNJ63GGD4A4FF46M&

موفق باشید

Armin060
سه شنبه 07 آبان 1387, 20:03 عصر
اين هم زبان اصلی هست و هم 24$ مايشه.

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

SMRAH1
چهارشنبه 08 آبان 1387, 02:47 صبح
سلام

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

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

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

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

موفق باشيد

Armin060
چهارشنبه 08 آبان 1387, 20:14 عصر
SMRAH1 (http://barnamenevis.org/forum/member.php?u=44567)
جان نميدونم چجوری از شما تشكر كنم....فقط ميتونم بگم مرسی...اميدوارم بتونم جبران كنم و... به چند تا مشكل كوچيك برخوردم....اين سورس فايل رو از كلاينت ميده به سرور...حالا اگر بخوايم از سرور بديم به كلاينت بايد چی كار كنم... و دو حالت داشته باشه :
1- از سرور به همه كلاينت ها Public
2- از سرور به يك يا چند كلاينت خاص Private

SMRAH1
چهارشنبه 08 آبان 1387, 21:59 عصر
سلام

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

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

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

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

موفق باشید

مهران رسا
پنج شنبه 09 آبان 1387, 06:32 صبح
آیا رویداد آماده ای برای مشخص کردن درخواست های ارسال شده وجود نداره که دیگه نیازی به استفاده از حلقه ها نباشه ؟!!

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

موفق باشی

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

SMRAH1
پنج شنبه 09 آبان 1387, 18:05 عصر
سلام


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

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

موفق باشید

Sajjad.Aghapour
پنج شنبه 09 آبان 1387, 18:45 عصر
دوست عزیز اگه می خواین یاد بگیرید از پایه شروع کنید و یاد بگیرید.(البته من هنوز شروع به یاد گیری نکردم ولی مقاله های خوبی دارم....یکیشو اینجا گذاشتم.)
http://barnamenevis.org/forum/showpost.php?p=602658&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/forum/showpost.php?p=515259&postcount=2

موفق باشی.

Armin060
پنج شنبه 09 آبان 1387, 19:35 عصر
کافیه خط 42 فایل ClientForm رو ویرایش کنید.

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

و از sajjadlove هم ممنون

SMRAH1
پنج شنبه 09 آبان 1387, 22:00 عصر
به جای 127.0.0.1 عدد IP یا نام کامپیوتر مورد نظر در شبکه رو بگذار!

Armin060
پنج شنبه 09 آبان 1387, 23:49 عصر
از كجا به دست بيارم كه الان چه كلاينت هایی دارن از سرور سرويس ميگيرند كه بخوام IP يا نامشون رو به دست بيارم. البته فكر كنم بايد از كلاينت ها به سرور ارسال كرد، چون همه ی كلاينت ها قطعا IP مشخص Server رو می دونند. اين راه درسته؟

SMRAH1
جمعه 10 آبان 1387, 12:10 عصر
سلام

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

موفق باشید

Armin060
جمعه 10 آبان 1387, 12:44 عصر
خوب كی وارده؟ يكی كمك كنه...!!!

s_ahmadneya
یک شنبه 26 آبان 1387, 18:05 عصر
آدرس زیر یه برنامه با سورس برای اینکار داره البته با c++من تصمیم دارم برنامه برای انتقال صدا و تصویر با س شارپ برای این کار بنویسم لطفا" با هم فکری هم این کار را به پایان برسانیم:متفکر:www.ipmsg.org (http://www.ipmsg.org)
http://barnamenevis.org/forum/images/statusicon/user_online.gif http://barnamenevis.org/forum/images/buttons/report.gif (http://barnamenevis.org/forum/report.php?p=633642) http://barnamenevis.org/forum/images/misc/progress.gif