PDA

View Full Version : حرفه ای: اتصال به یک برنامه چت روی LAN



kia1349
چهارشنبه 16 دی 1388, 13:57 عصر
سلام دوستان
یه برنامه چت توی سایت زیر هست که با وی بی دات نت نوشته شده
http://www.codeproject.com/KB/IP/TCP_IP_Chat_Program.aspx
این برنامه امکان چت بین کامپیوترهای یک شبکه رو میده
ولی شما باید آدرس کامپیوتری رو که میخواهید باهاش چت کنید توی برنامه وارد کنید و دکمه کانکت رو بزنید و پیامتون رو بفرستید
من این برنامه رو با کلی بدبختی و ارور گیری به سی شارپ تبدیل کردم
توی مبحث مولتی تردینگ بیچاره شدم تا تونستم درستش کنم که البته اینها همه از بیسوادی من بوده و به شما بیگناهان هیچ ربطی نداره
حالا چیزی که من بهش اضافه کردم یه مقدار جلوه های بصری است و اینکه مشخصات همه کامپیوترهای شبکه رو لیست میکنه و شما با انتخاب یک کامپیوتر میتونید با اون چت کنید
وقتی شما کامپیوتری رو انتخاب میکنید برنامه توسط یه سری کامپوننت وجود اون کامپیوتر بررسی رو در شبکه lan چک میکنه میکنه واگر اون کامپیوتر در شبکه فعال باشه اونوقت شما امکان تایپ پیام و ارسال رو دارید
حالا این همه حرف زدم تا بگم میخوام این تحفه رو براتون بزارم توی سایت ولی قبلش یه سوال دارم تا اگر به جوابش برسم اونو تکمیل تر کنم و بعدش بزارمش اینجا
سوالم اینه:من وجود کامپیوتر انتخاب شده از لیست رو میونم با پینگ و .... توی شبکه چک کنم ولی چطوری باید فهمید که اونم همین برنامه چت رو روی سیستمش نصب کرده و الان هم برنامه در حال اجراست(بدون نصب این برنامه در کامپیوتر مقصد،امکان چت با اون وجود نداره حتی اگر برنامه نصب باشه ولی در حال اجرا نباشه امکان چت وجود نداره)
اگر غیر از این حالت باشد وجود کامپیوتر چک میشه و پینگ هم درست جواب میده ولی موقع ارسال پیام سیستم ارور میده و میگه اون کامیوتر نمیتونه با شما چت کنه
برنامه با tcplistener و tcpclient نوشته شده و فاقد سرور میباشد(یکی از نقاط قوت برنامه)
منتظر راهنمایی های شما هستم
اگر جواب ندادید یا من سوادم نکشید اونوقت بفرمائید تا همینطوری بزارمش اینجا

Open-Source
چهارشنبه 16 دی 1388, 19:22 عصر
به نظر من :
کلاینت باید مدام به خط گوش کنه (یعنی مانند سرور باشه) بعد اگر از طرف سرور(که باید مثل کلاینت کانکت بشه) در خواست کانکت اومد باید آن رو قبول کنه و بلافاصله یک پیغام خاص رو بفرسته به سرور بعد ارتباط قطع بشه و کلاینت نقش کلاینت پیدا کنه و سرور هم نقش سرور.

امیدوارم که تونسته باشم منظورم رو رسانده یاشم.

Open-Source
چهارشنبه 16 دی 1388, 19:28 عصر
سلام دوستان
یه برنامه چت توی سایت زیر هست که با وی بی دات نت نوشته شده
http://www.codeproject.com/KB/IP/TCP_IP_Chat_Program.aspx
این برنامه امکان چت بین کامپیوترهای یک شبکه رو میده
ولی شما باید آدرس کامپیوتری رو که میخواهید باهاش چت کنید توی برنامه وارد کنید و دکمه کانکت رو بزنید و پیامتون رو بفرستید
من این برنامه رو با کلی بدبختی و ارور گیری به سی شارپ تبدیل کردم
توی مبحث مولتی تردینگ بیچاره شدم تا تونستم درستش کنم که البته اینها همه از بیسوادی من بوده و به شما بیگناهان هیچ ربطی نداره
حالا چیزی که من بهش اضافه کردم یه مقدار جلوه های بصری است و اینکه مشخصات همه کامپیوترهای شبکه رو لیست میکنه و شما با انتخاب یک کامپیوتر میتونید با اون چت کنید
وقتی شما کامپیوتری رو انتخاب میکنید برنامه توسط یه سری کامپوننت وجود اون کامپیوتر بررسی رو در شبکه lan چک میکنه میکنه واگر اون کامپیوتر در شبکه فعال باشه اونوقت شما امکان تایپ پیام و ارسال رو دارید
حالا این همه حرف زدم تا بگم میخوام این تحفه رو براتون بزارم توی سایت ولی قبلش یه سوال دارم تا اگر به جوابش برسم اونو تکمیل تر کنم و بعدش بزارمش اینجا
سوالم اینه:من وجود کامپیوتر انتخاب شده از لیست رو میونم با پینگ و .... توی شبکه چک کنم ولی چطوری باید فهمید که اونم همین برنامه چت رو روی سیستمش نصب کرده و الان هم برنامه در حال اجراست(بدون نصب این برنامه در کامپیوتر مقصد،امکان چت با اون وجود نداره حتی اگر برنامه نصب باشه ولی در حال اجرا نباشه امکان چت وجود نداره)
اگر غیر از این حالت باشد وجود کامپیوتر چک میشه و پینگ هم درست جواب میده ولی موقع ارسال پیام سیستم ارور میده و میگه اون کامیوتر نمیتونه با شما چت کنه
برنامه با tcplistener و tcpclient نوشته شده و فاقد سرور میباشد(یکی از نقاط قوت برنامه)
منتظر راهنمایی های شما هستم
اگر جواب ندادید یا من سوادم نکشید اونوقت بفرمائید تا همینطوری بزارمش اینجا

چطوری مشخصات همه کامپیوترها رو لیست میکنه.
آخه من هنوز یک کد ناب برای این کار ندیدم.
حتی برنامه هایی مانند netsupporrt هم بطور 100 درصد نمیتونند این کار رو بکنند.
:متفکر::متفکر::متفکر::متفکر:

debugger
چهارشنبه 16 دی 1388, 21:35 عصر
من اصلا در اين زمينه تخصص ندارم و اصلا نرم افزاري مثل اينو تا حالا برخورد نكردم تا بنويسم

ولي خب شبكه و ... بلدم

به نظر من براي اينكه بدونيم ايا نرم افزار در كلايت اجرا شده يا نه ؟ اول بايد بدونيم ما از طريق سرور (توسط برنامه نويسي) به چيزهايي از كلاينت مي تونيم دسترسي داشته باشيم

من فكر مي كنم مي تونيم به يك فايل share شده دسترسي داشته باشيم .

خب شما وقتي نرم افزار را اجرا مي كني يه كدي بنويس كه يك فايل با مشخصات pc مربوطه را share كنه و بعد برنامه اي كه رو سرور هست اون فايل را چك كنه اگر فايل به همراه مشخصات بود يعني برنامه اجرا شده

اگر نبود يعني برنامه اجرا نشده (موقع بستن برنامه هم اون فايل را delete كنيد و موقع اجرا ايجاد كنيد)

در واقع در اين روش شما دارين از يك Flag استفاده مي كنيد. (از لحاظ امنيتي كمي پايين هست ولي ميشه يه كارايي روش انجام داد)

راستي شما گفتين كه وقتي برنامه در حال اجرا نباشه يا كامپيوتر كلاينت خاموش باشه وقتي از سرور پيغامي ارسال كنيم خطا ميده

خب شما اون خطا را با try و catch بگير و يه مسيج بده كه برنامه اجرا نشده يا كامپيوتر شناخته نشده

در كل اين فقط به ذهنم رسيد و در حد يك ايده است شايد اصلا درست نباشه

اميدوارم كه مشكل حل بشه

راستي با UP كردن سورستون هم موافقم

vcldeveloper
چهارشنبه 16 دی 1388, 22:12 عصر
سوالم اینه:من وجود کامپیوتر انتخاب شده از لیست رو میونم با پینگ و .... توی شبکه چک کنم ولی چطوری باید فهمید که اونم همین برنامه چت رو روی سیستمش نصب کرده و الان هم برنامه در حال اجراست(بدون نصب این برنامه در کامپیوتر مقصد،امکان چت با اون وجود نداره حتی اگر برنامه نصب باشه ولی در حال اجرا نباشه امکان چت وجود نداره)
مخلص آقا کیا گل هستیم...
برنامه شما روی یک کلاینت که نصب میشه، روی یک پورت خاص Listen میکنه. سایر کلاینت ها برای اینکه بتونند با اون کلاینت ارتباط چت داشته باشند، باید به اون کلاینت از طریق همان پورت متصل بشند. حالا اگر برنامه ایی پیامی به آن کلاینت روی آن پورت بخصوص ارسال کنه، و عملش موفق نباشه، یعنی اون پورت بسته هست، یعنی هیچ برنامه ایی روی اون پورت در حال Listen کردن نیست. اگر به اون پورت روی کلاینت وصل شدید، می تونید یک پیام هم بهش ارسال کنید، و مثلا ازش بخواید که یک رشته خاص را به شما برگردانه. اگر پاسخش درست بود، یعنی برنامه شما داره Listen میکنه، اگر پاسخ نداد، یا پاسخش اشتباه بود، یعنی برنامه دیگه ایی داره روی اون کلاینت از این پورت استفاده میکنه.
البته این به شرطی هست که پورتی که روی کلاینت ها Listen میشه ثابت باشه، نه یک پورت تصادفی.

kia1349
پنج شنبه 17 دی 1388, 10:50 صبح
open-source عزیز ممنون از جوابت
اون کد لیست کردن کامپیوترهای شبکه رو فکر کنم از codeproject گرفتم
debugger جان روش سما رو هم امتحان میکنم .سورس رو up میکنم تا ببینید
حاج علی گل گلاب خیلی خیلی ارادت داریم.علی جان باید امتحان کنم.پورتها هم ثابته.یه پورت برای چت یه پورت هم برای ارسال فایل.چون این برنامه قابلیت ارسال فایل هم داره.ولی خوب بهینه سازی میخواد.مثلا لیست شدن کامپیوترهای شبکه باید در فواصل زمانی مناسب رفرش بشه و ارسال فایل بعد از تائید طرف مقابل اتفاق بیافته
از دوستان میخوام کمک کنند تا پیاده سازی بشه و بتونیم این برنامه رو کامل کنیم و برای استفاده در اختیار سایر دوستان قرار بدیم

article
پنج شنبه 17 دی 1388, 20:30 عصر
باسلام
ممنون از كدي كه قرار داديد اما من از سايت code project نميتوانم دانلود كنم چون عضويت مي خواهد اما نمي دونم چه طوري

kia1349
پنج شنبه 17 دی 1388, 21:05 عصر
والا ثبت نامش که راحته من قبلا ثبت نام کرده ام نمیدونم الان فرق کرده یا نه
ولی اگر چیزی میخواهید بگید تا براتون دانلود کنم

kia1349
جمعه 18 دی 1388, 13:04 عصر
یه سوال:
من وجود کامپیوترهای شبکه رو با پینگ کردن چک میکنم
حالا چون باید چت روی پورت 65535 انجام بشه کسی میدونه که آیا میشه پینگ رو به صورت
ping xxx.xxx.xxx.xxx:65535 زد و اگر جواب مثبت بود یعنی الان برنامه چت روی کامپیوتر مقصد run شده و داره روی پورت 65535 به درخواستها گوش میده و اگر برنامه ران نباشه جواب پینگ هم درست بر نگرده و ما متوجه بشیم که برنامه روی ip مقصد ران نیست و اینطوری بفهمیم چه کامپیوترهایی در شبکه وجود دارد و کدومشون هم در حال حاضر برنامه چت رو اجرا کرده اند

article
شنبه 19 دی 1388, 12:32 عصر
والا ثبت نامش که راحته من قبلا ثبت نام کرده ام نمیدونم الان فرق کرده یا نه
ولی اگر چیزی میخواهید بگید تا براتون دانلود کنم

کلا می خواهم ثبت نام کنم

ASKaffash
شنبه 19 دی 1388, 13:45 عصر
سلام
به نظر من برنامه دو بخش باشد . یک بخش یک Windows Service است که روی پورت مورد نظر عمل میکند و تضمین اجرای آن با سیستم عامل است و بخش دیگر که منوهای برنامه است و عمل چت را از طریق این سرویس انجام میدهد(در واقع همیشه پورت x را اشغال و رزرو شده نگه میدارد) میتوان از Dotnet Remoting هم استفاده کرد

fchmmm
پنج شنبه 31 تیر 1389, 16:55 عصر
اگه می شه محبت کنین و منو در نوشتن این برنامه راهنمایی کنین:(به زبان سی شارپ یا وی بی)
یک سرور و چندین کلاینت در حال اجرا باشند
یک سرور روی شبکه اجرا میشود.
آدرس ارتباط با سرور (آی پی و پورت ارتباطی) در تمامی کلاینت ها ثبت میگردد.
کلاینت ها اقدام به برقراری ارتباط با سرور میکنند.
اگر کلاینتی به دلیل مشغول بودن سرور موفق به برقراری ارتباط نشد به مدت زمان تصادفی منتظر مانده و مجددا برای برقراری ارتباط اقدام میکند.
هر کلاینتی که موفق به برقراری ارتباط با سرور شد درخواست خود را اعلام میکند
سرور به کلاینت فهرستی از اعداد را برای پردازش اعلام میکند.
کلاینت بلا فاصله پس از دریافت فهرست و اعلام صحت دریافت اطلاعات از سرور جداشده و شروع به پردازش میکند.
پس از اتمام پردازش کلاینت مجددا به سرور متصل شده و پس از اعلام گزارش از اعداد اولی که پیدا کرده است درخواست دریافت فهرست پردازشی جدید را ارسال کرده و این مسیر ادامه میابد
هر کلاینت در لحظه ی ارسال پیام به سرور متصل گردیده، پیام را ارسال و پاسخ را دریافت میکند و بلافاصله از سرور جدا میشود تا ارتباط برای سایر کلاینت ها آزاد شود. به عنوان مثال یک کلاینت به سرور متصل شده و پیام "کلاینت شماره *** آماده" (به جای *** شماره یا نام کلاینت که توسط یک جعبه متن در برنامه تعیین میشود قرار میگیرد) را ارسال میکند. سرور هم در پاسخ پیام "کلاینت *** دریافت شد" را ارسال میکند. و کلاینت پس از دریافت این پیام از سرور جدا میشود.
خواهشاً اگه کسی می دونه منو راهنمایی کنه

FastCode
پنج شنبه 31 تیر 1389, 17:17 عصر
اگه می شه محبت کنین و منو در نوشتن این برنامه راهنمایی کنین:(به زبان سی شارپ یا وی بی)
یک سرور و چندین کلاینت در حال اجرا باشند
یک سرور روی شبکه اجرا میشود.
آدرس ارتباط با سرور (آی پی و پورت ارتباطی) در تمامی کلاینت ها ثبت میگردد.
کلاینت ها اقدام به برقراری ارتباط با سرور میکنند.
اگر کلاینتی به دلیل مشغول بودن سرور موفق به برقراری ارتباط نشد به مدت زمان تصادفی منتظر مانده و مجددا برای برقراری ارتباط اقدام میکند.
هر کلاینتی که موفق به برقراری ارتباط با سرور شد درخواست خود را اعلام میکند
سرور به کلاینت فهرستی از اعداد را برای پردازش اعلام میکند.
کلاینت بلا فاصله پس از دریافت فهرست و اعلام صحت دریافت اطلاعات از سرور جداشده و شروع به پردازش میکند.
پس از اتمام پردازش کلاینت مجددا به سرور متصل شده و پس از اعلام گزارش از اعداد اولی که پیدا کرده است درخواست دریافت فهرست پردازشی جدید را ارسال کرده و این مسیر ادامه میابد
هر کلاینت در لحظه ی ارسال پیام به سرور متصل گردیده، پیام را ارسال و پاسخ را دریافت میکند و بلافاصله از سرور جدا میشود تا ارتباط برای سایر کلاینت ها آزاد شود. به عنوان مثال یک کلاینت به سرور متصل شده و پیام "کلاینت شماره *** آماده" (به جای *** شماره یا نام کلاینت که توسط یک جعبه متن در برنامه تعیین میشود قرار میگیرد) را ارسال میکند. سرور هم در پاسخ پیام "کلاینت *** دریافت شد" را ارسال میکند. و کلاینت پس از دریافت این پیام از سرور جدا میشود.
خواهشاً اگه کسی می دونه منو راهنمایی کنه

قبلا" نوشته شده.اسمش هست TCP

fchmmm
شنبه 02 مرداد 1389, 21:52 عصر
قبلا" نوشته شده.اسمش هست TCP




یعنی چه قبلاً نوشته شده اسمش هست TCP

MehdiElexal
یک شنبه 25 مهر 1389, 22:17 عصر
یعنی چه قبلاً نوشته شده اسمش هست TCP
یعنی این برنامه قبلا نوشته شده سرچ کن اسمش tcp

reza_artyst
پنج شنبه 25 آذر 1389, 23:24 عصر
سلام.
من زیاد از برنامه نویسی و شبکه اطلاعاتی ندارم:اشتباه:.اما به نظرم تو باید بتونی یک ip scaner بنویسی بعد یه رنج ip بهش بدی که بتونه بر اساس اون پورت خاص مثلا 1234 آیپی ها رو چک کنه.اگه بتونی این کارو بکنی و یک ایپی اسکنر بسازی، روم هم می تونی بسازی:لبخند:.من خودم با ویژوال بیسیک اینکارو کردمو جواب هم گرفتم.:چشمک:

ali32n70
دوشنبه 27 دی 1389, 22:37 عصر
با سلام
من يه برنامه نويس ويژوال بيسك هستم كه دارم به سي شارپ ميام براي ياد گيري هم به كار گروهي نياز دارم مثل اين
نظر من اين است (تحليل برنامه مشابه مثل ياهو مسنجر)

1- يك سرور مركزي وجود دارد كه تمام كلاينتها آي پي و پورت آن را براي لاگ اين مي دانند و براي ورود به سرور مركزي لاگين مي كنند چه با رمز و چه بي رمز
2- چون ليست اي پي تمام كامپيوترهاي فعال و داراي برنامه در سرور هست نيازي به اسكن شبكه نيست و اصلا توصيه نمي شود
3- در ارتباط عمومي پيغامها به سرور و از سرور به كلا كلاينتهاي روم فرستاده ميشود
4- در ارتباط Peer و خصوصي اي پي از سرور درخواست و كلاينتها مستقيم به هم متصل مي شوند براي درخواست فايل و يا چت خصوصي بدون لايه ايزوله
5- براي ارسال پيغامها از پروتكل UDP استفاده ميشود و در بقيه از TCP
6- درصورت استفاده از TCP براي ارسال پيغام كلاينت بعدي نمي تواند متصل شود ( اينجا يه كرش رو داشته باشيد)

به نظر من اين اصول كلي طراحي اين برنامه است البته با افزايش امكانات ميتواند طراحي آن هم گسترش يابد ويا براي كار حرفه اي بايد ساختار ايزوله براي مسايل امنيتي رعايت شود

دوستان لطف كنند كدهاش رو براي ما تازه واردها بنويسند تا از روش شبي سه بار مشق بنويسيم و ياد بگيريم :)

من كه تو طراحي برنامه اي براي ايجاد انكدينگ يو ار ال براي كار خاص نتونستم كد اسكي كاراكتر رو بگيرم و به تكست اضافه كنم :(

لطفا نخنديد

shuriken
سه شنبه 28 دی 1389, 10:06 صبح
سلا
جناب kia1349 عزیز من خودم قبلا این برنامرو نوشتم و از روشی که در روتر ها هم استفاده میشه استفاده کردم
اون روش اینه که شما میتونید تو برنامتون این رو بگنجونید که هر بار برنامه اجرا میشه و از اتصالش به شبکه مطمئن میشه
یک پیام بصورت broadcast روی شبکه ارسال میکنه و به سایر برنامه هایی که در حال اجرا هستند اطلاع میده که به وارد شبکه شده
و کلاینت هایی هم که این پیام رو دریافت میکنن بهش پاسخ میدن که کلاینت تازه واردمون هم بدونه چه سیستم هایی در حال حاضر در شبکه هستن
و موقع بستن برنامه هم برعکس اینکار رو انجام بدین یعنی پیغام قطع ارتباط رو broadcast کنین که مسلما نیاز به جواب نیست
برای اینکار شما میبایست کلا یه thread جداگونه در نظر بگیرین که در تمام مدتی که برنامه در حال اجرا هست لیسن کنه که پیغامهای جدید رو دریافت کنه.

Fatal_Frame
چهارشنبه 23 فروردین 1391, 23:27 عصر
سلام
پروژه ی دانشگاهی من ساختن نرم افزار چت به صورتی که 2 کلاینت بتونن با هم چت کنن و برای هم فایل ارسال کنن و من ابتدا هیچ اطلاعاتی در این مورد نداشتم بعد از یک سری سرچ در اینترنت فهمیدم که باید برنامه نویسی socket programming رو یاد بگیرم و یه نرم افزار چت بین کلاینت و سرور رو گرفتم و روش کار کردم البته چون من برنامه نویسی نکردمو فقط یه مقدار c# بلدم خواستم اگه لطف کنین راهنماییم کنین چون واقعا به راهنماییتون احتیاج دارم و تنها نمیتونم کاری کنم.
پروژم به زبان c# باید باشه و اگه لطف کنین میتونم نمونه پروژ ه ای رو که دارم روش کار میکنمو براتون بفرستم.
بازم ممنون میشم اگه لطف کنین و کمکم کنین.

hamid59022
چهارشنبه 11 اردیبهشت 1392, 13:00 عصر
سلام خسته نباشيد لطفا اگر مي شود دانلود برنامه را براي من بفرستيد من در صدا و سيما هستم كه همه سايت ها را فيلتر مي كند hamid59022@yahoo.com

ad.davachi
چهارشنبه 01 خرداد 1392, 11:27 صبح
من دانلود کردم عالی بود مخصوصا قسمت تشخیص سیستمهای روی شبکه

nazanin_shajoon
سه شنبه 07 خرداد 1392, 23:31 عصر
سلام .
می گم من هر قسمتشو که باز می کنم مشابه قسمت قبلیه که . تفاوتشون چیه؟ همشونم اجرا می شن و خروجیشون یکیه
بعد میشه در مورد برنامتون کلا توضیح بدین؟
من تازه کارم و درکش نمی کنم . تا جایی که خوندم برای چت باید یه برنامه سمت سرور داشته باشیم و یه برنامه برای کلاینت . این برنامه شما کلاینت و سرورش کجاست؟ و در کل چطوری میشه اجراش کرد؟همین برنامه رو دو کلاینت روی سیستمشون داشته باشن می تونن ارتباط برقرار کنن آیا؟
ممنون میشم راهنمایی کنید