زمان کنونی: ۱۰ اردیبهشت ۱۴۰۳, ۰۵:۲۰ ب.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

مشکل در برنامه نویسی تحت شبکه(خیلی مهم)

ارسال:
۰۱ شهریور ۱۳۹۱, ۰۶:۰۶ ب.ظ
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
سلام دوستان استادمون گفته باید یه برنامه تحت شبکه بنویسیم که سیستم چت دو نفره رو پیاده سازی بکنه من در مورد سوکت پروگرمینگ تحقیق کردم و با توابع و استراکچرهاش آشنا شدم ولی نمیتونم خوب پیاده سازیش کنم در مورد برنامه های مولتی ترد هم زیاد چیزی نمیدونم و نمیدونم چطور اجرا میشن ... زبان برنامه نویسیمون c++ هست و سوکت تحت لینوکسه کتاب احسان ملکیان بخش ۷ در مورد سوکت پروگرمینگش رو هم خوندم ولی خیلی خوب نمیتونم اون مثال آخر در مورد چاپ hello رو تحلیل کنم ممنون میشم راهنمایی کنید
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۰۱ شهریور ۱۳۹۱, ۰۶:۱۸ ب.ظ
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
باید واسه چت روم باید از tcp استفاده کنی دوست من.
و روال کار هم اینطوره که یه برنامه client می نویسی و یه برنامه سرور.
که درون برنامه سرور به ازای کانکت شدن هر برنامه کلاینت به سرور باید یه thread جدید ایجاد بشه تا به خط اون کلاینت مورد نظر گوش کنه.
چت دو نفره هم که خیلی راحت تره (یعنی اگه چند نفره نباشه).به هر برنامه ۱ پورت خاص بده یعنی مثلا یکی پورت ۳۰۰۰ و دیگری ۳۰۰۱ که دیگه نیازی به thread نداری!
و حین گوش دادن به خط هم هیچ مشکلی پیش نمیاد.
البته اگه مشکلی واسه خط گوش دادن پیدا کردی میتونی توی c# از کد Application.DoEvents استفاده کنی.
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: فوژان
ارسال:
۰۱ شهریور ۱۳۹۱, ۰۶:۲۹ ب.ظ (آخرین ویرایش در این ارسال: ۰۱ شهریور ۱۳۹۱ ۰۶:۳۴ ب.ظ، توسط فوژان.)
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
آخه باید با thread پیاده سازی کنیم و من نمیدونم چه طوری باید یه ترد ایجاد کنم
چرا باید دوتا پرت بدم مگه نباید شماره پرت ها در سمت سرور و کلاینت یکی باشن؟ برنامه بین سرور و یک کلاینته نه دوتا کلاینت
شایدم دارم اشتباه میکنم نمیدونم
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۰۱ شهریور ۱۳۹۱, ۰۷:۱۵ ب.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
(۰۱ شهریور ۱۳۹۱ ۰۶:۲۹ ب.ظ)فوژان نوشته شده توسط:  آخه باید با thread پیاده سازی کنیم و من نمیدونم چه طوری باید یه ترد ایجاد کنم
چرا باید دوتا پرت بدم مگه نباید شماره پرت ها در سمت سرور و کلاینت یکی باشن؟ برنامه بین سرور و یک کلاینته نه دوتا کلاینت
شایدم دارم اشتباه میکنم نمیدونم
ترد برای وقتی هست که میخواید چند مسیر اجرای متفاوت برای گوش کردن برای کلاینت های جدید و تبادل اطلاعات با کلاینت های قبلی داشته باشید.
شماره پورت مربوط به پراسس میشه و الزامی نداره در سمت سرور و کلاینت یکی باشه فقط باید دو طرف شماره پورت همدیگه رو داشته باشن.
یه دوره خوب برای ساکت پروگرمنیگ(این صفحه اولشه):

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: alirrrrrr , فوژان
ارسال:
۰۱ شهریور ۱۳۹۱, ۰۷:۳۰ ب.ظ (آخرین ویرایش در این ارسال: ۰۱ شهریور ۱۳۹۱ ۱۱:۴۱ ب.ظ، توسط فوژان.)
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
ممنون میشم یکم بیشتر توضیح بدید که من چطوری باید شماره پرت بدم چون تنها تصوری که دارم از پرت و نحوه عدد دادن بهش اینه که اول برنامه میایم define یه شماره بهش میدیم بعد با htons اون مقدار رو انتساب میدیم و اینکه من چطور به کلاینت پیغام بفرستم؟
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۰۱ شهریور ۱۳۹۱, ۰۹:۰۲ ب.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
تاپیک منتقل شد.

هان مشو نومید چون واقف نه ای از سر غیب
باشد اندر پرده بازی های پنهان غم مخور
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۰۱ شهریور ۱۳۹۱, ۱۱:۴۷ ب.ظ (آخرین ویرایش در این ارسال: ۰۱ شهریور ۱۳۹۱ ۱۱:۴۷ ب.ظ، توسط فوژان.)
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
(۰۱ شهریور ۱۳۹۱ ۰۹:۰۲ ب.ظ)Helmaa نوشته شده توسط:  تاپیک منتقل شد.
ممنون
دوستان اگر کمک کنید ممنون میشم چون واقعا الان حس میکنم دو روز وقتم رو برای مطالعه سوکت حروم کردم و چیزی یاد نگرفتمSadUndecidedHuh
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۰۲ شهریور ۱۳۹۱, ۱۲:۱۹ ق.ظ
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
شما اگه بخاید برنامه ای که شامل تعداد نا مشخصی کلاینته بنویسید ،باید از تردینگ استفاده کنید .
ولی اگه بخاید برنامه ای برای ارتباط دو تا کلاینت بنویسید میتونید با یه کد ساده و بدون حتی نیاز به thread اونو بسازید.
در مورد ترد که گفتید خیلی آنچنان چیز پیچید ای نیستش.البته من درون c# کار کردم که مطمئنا کلیتش توی Visual C++ هم به همون شکله.
بدین شکله تردینگ که شما یک تابع به عنوان هسته مرکزی یک ترد میسازین و اون تابع یا رویه به عنوان عنصر جداونه ای ای همزمان با ترد اصلیتون که همون برنامه ی اصلیه اجرا میشه که اینجا زمانی که سرور میخاد همزمان به چندین خط (پورت) گوش کنه و پاسخ بده که این هم واسه اینه که چندین تا برنامه کلاینت(که همگی از یک نوعند) میخان همزمان با این سرور رابطه و مراوده داشته باشن.پس ردینگ رو برای برنامه سمت سرورت نیاز داری.
و همینطور نحوه برقراری ارتباط چند کلاینت با هم مثل یک چت روم واقعی هم ،شما باید یک پورت خاص رو درون برنامه سرور به ورود و خروج کلاینت ها قرار بدید.بدین شکل مثلا هر کلاینتی برای اعلام ورود یا خروجش باید اونو با ارسال نام+ورودیه یا خروجیه رو به سرور بفرسته و سرور پس از دریافت پیام برای accept اون یک شماره پورت رو به اون کلاینت بده و همینطور یک شی از thread برای اون کلاینت ایجاد کنه تا من بعد مراوده سرور با کلاینت توی thread انجام بشه.وکلاینت هم بعد از دریافت شماره پورتش ،متوجه پذیرفته شدنش میشه .این شماتیک کلی یک چت رومه
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: فوژان
ارسال:
۰۲ شهریور ۱۳۹۱, ۱۲:۲۵ ق.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
هم دو نمونه برنامه چت بررسی شده چون کارت فوری هست میتونی ازشون کمک بگیری البته به زبان سی شارپ نوشته شده.

هان مشو نومید چون واقف نه ای از سر غیب
باشد اندر پرده بازی های پنهان غم مخور
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: فوژان
ارسال: #۱۰
۰۲ شهریور ۱۳۹۱, ۰۱:۳۰ ق.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
سلام دوست گرامی
برای فهم بهتر مفهوم سوکت و سوکت پروگرامینگ متن زیر رو مطالعه کنید:
برای ارتباط بین پردازش های مختلف روی یک هاست سیستم عامل از ارتباط بین پردازشی استفاده می کنه. اما اگه دو پردازش روی دو هاست مختلف باشن ارتباط بین اونها با استفاده از پاس کاری پیام بین هر دو انجام میشه. به پردازشی که ارسال پیام رو شروع می کنه پردازش کلاینت و به پردازشی که جواب پردازش کلاینت رو می ده پردازش سرور می گوئیم.
به طور کلی دو نوع پیام داریم: پیام درخواست – پیام جواب. پردازش کلاینت پیام درخواست رو به پردازش سرور میفرسته و پردازش سرور در جواب پیام جواب رو به پردازش کلاینت میفرسته.
پاس کاری پیام بین پردازش کلاینت و پردازش سرور بوسیله سوکت ها انجام میشه. سوکت ارتباط بین پردازش و پروتکل مورد استفاده در شبکه برای پاس کاری پیام رو برقرار می کنه (مثل tcp). در واقع سوکت یک در بین پردازش و پروتکل انتقال پیام هست. هم پردازش سرور و هم پردازش کلاینت یک سوکت برای خود دارند.
اما خوب هر پردازش برای شناسایی شدن در شبکه یک شماره منحصر به فرد داره که از ترکیب آدرس IP هاستی که پردازش درش قرار داره و شماره پورت متصل به پردازش تشکیل میشه.
اگر پروتکلی که استفاده می کنید tcp باشه روال پاس کاری پیام به این صورت هست:
۱- پردازش سرور قبل از پردازش کلاینت اجرا میشه و بعد پردازش کلاینت اجرا میشه.
۲- پردازش کلاینت با پردازش سرور تماس میگیره. برای این کار پردازش کلاینت باید یک سوکت برای خود بسازه و در آن شماره IP سرور و شماره پورت پردازش سرور رو مشخص کنه.
۳- سرور یک سوکت برای پردازش سرور ایجاد میکنه تا این پردازش بتونه با پردازش کلاینت پیام پاس کاری کنه. به ازاء هر کلاینت که بخواد پیام پاس کاری کنه، سرور یک سوکت ایجاد میکنه.
۴- بعد از اینکه ارتباط برقرار شد، کلاینت پیام درخواست به سوکت پردازش سرور ارسال می کنه، سرور اونو میخونه و پردازش میکنه، در جواب سرور هم پیام جواب رو برای پردازش کلاینت میفرسته. کلاینت پیام رو میخونه. اگه درخواست جدیدی داشته باشه همین روال درخواست و جواب ادامه پیدا می کنه وگرنه سوکت رو میبنده. در نهایت سرور هم سوکت رو میبنده.

برای پیاده سازی این نرم افزار با زبان سی شارپ بدین طریق عمل کنید:
یک پروژه برای برنامه کلاینت و یک پروژه دیگر برای برنامه سرور بسازید. برای نگهداری کاربران از بانک اطلاعاتی استفاده کنید. بانک اطلاعاتی بر روی سرور نگهداری میشود.
در برنامه کلاینت، اگر خواستید می توانید از تشخیص هویت استفاده کنید و کلاینت حتما باید یک نام کاربری و کلمه عبور برای ورود داشته باشد. (در صورتی که یک کلاینت و یک سرور دارید اختیاری است و در صورتی که کلاینتها بیشتر باشد بهتر است).
بعضی از کدهایی که کمکتون می کنه اینا هستن:
برای شروع ارسال پیام از طرف برنامه کلاینت این کد را بنویسید:
کد:
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// Specifying IP Address Of Server
IPAddress ipAddress = IPAddress.Parse("192.168.0.1");

// Specifying Port Number Of Server Socket
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1000);

// Connecting To Server Socket
clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
کد واضح است. تنها خط آخر بیان می کند که بعد از وصل شدن به سرور باید متد OnConnect اجرا شود که باید در آن پیام هایی که می خواهید برای سرور بفرستید را مشخصی کنید و دستورات لازم دیگر برای ارسال پیام و قالب پیام هم باید مشخص شوند.
در برنامه سرور با استفاده از کلاس Socket کد زیر را در رویداد Load صفحه بنویسید:
کد:
// Creating Server Socket
Socket  serverSocket = new Socket(AddressFamily.InterNetwork,
                          SocketType.Stream,
                          ProtocolType.Tcp);

// Specify IP Address and Port Number 1000
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1000);

// Binding ipEndPoint to Socket and Listen to Port
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(4);

// Accepting Clients
serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);
کد واضح است. تنها خط آخر کد بیان می کند که در صورتی که یک پیام درخواست از طرف کلاینت رسید متد OnAccept رو به صورت نامتقارن فراخوانی کن. این متد را باید پیاده سازی کنید و بیان کنید که به ازاء این کلاینت یک سوکت جدید ایجاد شود. در همین حین به صورت نامتقارن به درخواست کلاینتهای دیگر گوش دهیم و درنهایت پیام را از همین کلاینت دریافت کنیم.


مطالب تئوری رو از اسلاید فصل دوم این کتاب ترجمه کردم: (اسلایدهاش free بودن موقع ما)
کد:
Computer Networking: A Top Down Approach,
۴th edition.
Jim Kurose, Keith Ross
Addison-Wesley, July 2007.
کدهای سی شارپ هم از یکی از دوستان گرفته شده.

التماس دعا
موفق باشید

«چون هلال ماه رمضان پدید آید، درهای دوزخ بسته و درهای بهشت باز می شود و شیاطین به زنجیر کشیده می شوند.» حضرت محمد (ص)
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: Helmaa , فوژان
ارسال: #۱۱
۰۲ شهریور ۱۳۹۱, ۱۰:۴۹ ب.ظ
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
تو سایت codeproject برو سرچ کن چیزای خوبی گیرت میاد
یه سایت هم هست به اسم
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
که پروژه های خفنی توش داره و خوراک پروژه های دانشجوییه منتها یا باید پول بدی عضو شی یا اینکه چند تا از برنامه های آستو واسشون آپلود کنی بهت سهمیه دانلود بدن
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: فوژان
ارسال: #۱۲
۰۳ شهریور ۱۳۹۱, ۰۲:۱۵ ب.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
واقعا از همه ی شما دوستان ممنونم
من در مورد thread چیز زیادی نمیدونم و نمیدونم چطور باید یک thread ایجاد کرد اگر pdf یا کتابی هست که بشه دانلود کرد یا حتی خرید ممنون میشم معرفی کنید چون این پروژه نیست فقط یه تمرین کلاسیه و من هدفم یاد گیریه نه نمره چون اصلا نمره ای در کار نیست
۱
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال: #۱۳
۰۴ شهریور ۱۳۹۱, ۱۱:۴۰ ب.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
دوستان کسی نبود راهنمایی کنه Huh
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال: #۱۴
۰۶ شهریور ۱۳۹۱, ۱۰:۲۵ ب.ظ
RE: مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
کسی ایده ای نداشت؟
دوستان کسی میدونه پارس کردن یک فایل یا کلاس یا ... در سی پلاس پلاس چیه و چه کاربردی داره؟
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال: #۱۵
۰۷ شهریور ۱۳۹۱, ۱۰:۲۰ ب.ظ
مشکل در برنامه نویسی تحت شبکه(خیلی مهم)
یعنی توکن هاشو در بیارید ازش.
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ


موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  کمک برای شروع برنامه نویسی seyed ehsn ۲۱ ۱۴,۳۸۳ ۲۴ بهمن ۱۴۰۲ ۰۵:۱۰ ب.ظ
آخرین ارسال: maryamjafari63
  جزوه خلاصه نکات مهم فصول ابتدایی درس مهندسی نرم افزار Happiness.72 ۱ ۳,۵۴۸ ۱۳ خرداد ۱۴۰۱ ۰۶:۲۸ ب.ظ
آخرین ارسال: M o h m m @ d
  تصمیم گیری مهم درباره مکان سرور سایت admin ۴ ۴,۴۱۱ ۲۸ دى ۱۴۰۰ ۰۳:۵۹ ب.ظ
آخرین ارسال: mahsa3323
  پروپوزال نویسی ف.ش ۹ ۱۲,۵۴۲ ۰۱ دى ۱۴۰۰ ۰۱:۱۷ ب.ظ
آخرین ارسال: golkhorami
  رودمپی برای برنامه نویسی Doctorwho ۱ ۱,۸۰۹ ۲۵ آذر ۱۴۰۰ ۰۳:۰۲ ق.ظ
آخرین ارسال: one hacker alone
  استخدام برنامه نویس یا کارآموز برنامه نویسی سی شارپ Hesitant_Girl ۰ ۱,۵۱۹ ۲۰ شهریور ۱۴۰۰ ۱۲:۰۲ ب.ظ
آخرین ارسال: Hesitant_Girl
  رودمپی برای یادگیری برنامه نویسی Doctorwho ۰ ۱,۶۰۶ ۲۳ اردیبهشت ۱۴۰۰ ۱۱:۲۲ ق.ظ
آخرین ارسال: Doctorwho
  درخواست برنامه برای اردینو در iot seokheiry ۱ ۳,۰۱۹ ۱۳ بهمن ۱۳۹۹ ۱۲:۵۵ ب.ظ
آخرین ارسال: iot-programer
  رفع اشکال نصب جاوا، مشکل ساخته نشدن virtual machine shiivaa ۱۲ ۱۹,۳۴۱ ۱۹ آبان ۱۳۹۹ ۰۷:۲۹ ب.ظ
آخرین ارسال: wanted471
  سوال مهم از کمتازیا jamshid51 ۰ ۱,۸۰۶ ۲۹ مهر ۱۳۹۹ ۱۰:۰۷ ب.ظ
آخرین ارسال: jamshid51

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close