تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 12

نام تاپيک: سی شارپ برنامه نویسی شبکه Socket

  1. #1
    داره خودمونی میشه Ehsan-l-able's Avatar
    تاريخ عضويت
    Sep 2010
    محل سكونت
    ایران
    پست ها
    121

    9 سی شارپ برنامه نویسی شبکه Socket

    سلام
    چند سوال در رابطه با برنامه نویسی سوکت در سی شارپ دارم که برام مبهمه !!!!!

    من در یک کافی نت 10 تا کلاینت دارم. برنامه ای میخوام بنویسم که وقتی نسخه کلاینت روی تک تک کلاینت ها اجرا میکنم به سرور وصل بشه و قابلیت ارسال پیام رو داشته باشه. نکته ای که هست اینه که نمیخوام سوکت قطع بشه میخوام سرور هز زمانی که میخواد یک پیام به کلاینت بفرسته . نه اینکه بیاد دوباره سوکت بسازه پیام بفرسته و قطع کنه . نمیدونم میتونم منظورم رو برسونم

    1- چطوری باید اینکار رو انجام بدم ؟ روال کار به چه شکلیه ؟
    2- آیا برای 10 کلاینت باید 10 تا سوکت ایجاد بشه ؟ (مثال)
    3- آیا هر کلاینت باید با یک پورت مجزا به سرور وصل بشه ؟ یعنی سرور باید روی 10 پورت شنود کنه؟ (مثال)
    4- وقتی بخوام به فرض مثال به کلاینت 5 یک متن بفرستم از توی سرور چطور تشخیص بدم به کدام سوکت باید پیغام بدم؟
    5- اصلا از کجا بفهمم که سوکت هنوز وصله ؟
    6- در ضمن برای ارسال هر دستور در یک Thread جداگانه دستورات رو باید به چه شکلی بنویسم ؟

    دوستان عزیز اگه امکان داره با مثال برام توضیح بدید راستش پروژه ترم آخره خیلی نیاز بهش نیاز دارم.
    با تشکر

  2. #2
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    من نظری دارم اما دوستانی که تجربه بیشتری دارند نیز ما را محروم نسازند.
    لازم نیست 10 سوکت به ازای هر کلاینت باز باشه. بلکه شما در پکت ارسالیتان از طرف کلاینت مشخص بکنید که کدام کلاینت در حال ارسال اطلاعات هست مثل خود اترنت که آدرس فرستنده در سگمنت ارسال هست.
    این طوری در سرور می فهمید که اطلاعات آمده از کدام کلاینت هست.
    حالا بریم سراغ سرور:
    خوب مشخص هست که آدرس کلاینت ها متفاوت هست، همه هم نمی خواهند اطلاعات بگیرند ( Broadcast )، یک پیغام هم لازم نیست تا عده ای دریافت کنند ( Multicast ). پس می بایست یک سوکت خاص به یک آدرس و پورت خاص متصل شود. پس در هر ارسال می شود یک سوکت زد. اما حالا یک نکته وجود دارد:
    حجم اطلاعات ارسالی در یک بازه ی ثابت حدودا چه قدر هست؟
    اگر زیاد هست پس لازم است تا سوکت باز بماند چرا که negotiate اولیه سوکت بارها و بارها صورت می گیرد و این خود باعث کند شدن جابه جایی اطلاعات می گردد.
    اگر هم کم است باز هم باید باز باشد ، چرا؟
    چون که اگر کلاینت قطع شد این طوری متوجه بشیم. از پراپرتی Connected در خود سوکت، نه!. در ارتباطات مابین دستگاهی یک پکت وجود دارد به نام Live. که خود Ethernet هم داره. با جابه جایی این پکت متوجه حضور کلاینت می شویم. این پکت رو باید خودمون بسازیم چرا که ممکن هست برنامه ما در کلاینت بسته بشه پس در لایه 7 خودمون باید یک پکت live بسازیم.

    برای مابقی سوالات هم سعی دارم پاسخ با کد قرار بدم.

    موفق باشید.

  3. 2 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    داره خودمونی میشه Ehsan-l-able's Avatar
    تاريخ عضويت
    Sep 2010
    محل سكونت
    ایران
    پست ها
    121

    پيش فرض توضیحات

    >> لازم نیست 10 سوکت به ازای هر کلاینت باز باشه. بلکه شما در پکت ارسالیتان از طرف کلاینت مشخص بکنید که کدام کلاینت در حال ارسال اطلاعات هست
    >> پس می بایست یک سوکت خاص به یک آدرس و پورت خاص متصل شود. پس در هر ارسال می شود یک سوکت زد. اما حالا یک نکته وجود دارد:

    چون که اگر کلاینت قطع شد این طوری متوجه بشیم. از پراپرتی Connected در خود سوکت، نه!. در ارتباطات مابین دستگاهی یک پکت وجود دارد به نام Live. که خود Ethernet هم داره. با جابه جایی این پکت متوجه حضور کلاینت می شویم. این پکت رو باید خودمون بسازیم چرا که ممکن هست برنامه ما در کلاینت بسته بشه پس در لایه 7 خودمون باید یک پکت live بسازیم.
    ممنون از پاسختون.
    مشکلی برای اینکه سرور بفهمه کدوم کلاینت پیغام فرستاده نیست . همون طور که گفتید کلاینت در پک ارسالی مشخص میکنه .
    اما در رابطه با سرور شما گفتید نیازی نیست 10 تا سوکت باز باشه !!! اما در ادامه گفتید برای هر کلاینت یک سوکت خاص به یک آدرس و پورت خاص متصل بشه !!!!!

    برنامه سرور رو اجرا میکنم یک سوکت ایجاد میشه و با شنود روی یک پورت منتظر ارتباط میشود. یک لیست باکس در برنامه سرور ، تمام کلاینت های کانکت شده رو نمایش میده.
    برنامه کلاینت در زمان اجرا در رویداد "فرم لود" به سرور با آی پی و پورتی که از قبل تنظیم شده به سرور کانکت میشه (با حداکثر سرعت !) در thread جدا.
    یک کلاینت دیگه برنامه رو اجرا میکنه اون هم کانکت میشه و به لیست سرور اضافه میشه. به همین ترتیب تا مثلا 50 کلاینت.

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

    اگه برنامه کلاینت در یکی از سیستم بسته شد ، از لیست سرور خودکار حذف بشه (در رویداد form closing) قبل از خروج کامل یک دستور مبنی قطع شدن سوکت بفرسته.

  5. #4
    کاربر فعال تالار .Net senaps's Avatar
    تاريخ عضويت
    Jul 2008
    محل سكونت
    خونمون
    پست ها
    4,547

    پيش فرض

    ببخشید، من دو سوال برام پیش اومد
    ۱-میشه سرورتون رو که میخواد اینکارو بکنه رو هم به من معرفی بکنین؟
    ظاهرا من گاهی اوقات به ملت سیستم های الکی برای سرور پیشنهاد کردم....مشخصات سرورتون چیه؟؟؟
    ۲-هدف از بستن سوکت ها چیه؟!

  6. #5
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    اما در ادامه گفتید برای هر کلاینت یک سوکت خاص به یک آدرس و پورت خاص متصل بشه !!!!!
    نه اشتباه نشه. هر کلاینت یک سوکت خاص به یک آدرس و پورت خاص بزنه به سرور نه بر عکس!!!
    که اون آدرس آدرس سرور هست. در واقع سوکت روی سرور دارای IpEndPoint برابر با Any است. که هر کی می تونه بهش وصل بشه با ماکزیمم Listen برابر با int.MaxValue .

    کلاینت نباید اعلام کند هست یا نه. سرور باید بفهمد هست یا نه. چرا؟ چون ممکنه کلاینت ریست بشه نه برنامه بسته بشه که بخواهد بگه "ما رفتیم!"
    شما در یک Thread یک Timer راه بنداز که در بازه های 200ms یک پکت بفرسته بگه " هستی؟" کلاینت هم باید بگه هستم.
    و اگر 1 ثانیه گذشت و نگفت "هستم" باید سرور بفهمه که کلاینت رفته است در دیار باقی!

    یک مثال می گذارم.

    موفق باشید.

  7. این کاربر از Msba بخاطر این مطلب مفید تشکر کرده است


  8. #6
    داره خودمونی میشه Ehsan-l-able's Avatar
    تاريخ عضويت
    Sep 2010
    محل سكونت
    ایران
    پست ها
    121

    پيش فرض


    سلام مجدد. راستش مشکل من کانکت شدن کلاینت ها با سروره .
    یه بار اجرا میکنی کانکت میشه کار میکنه.
    فردا برنامه رو میبری نشون یکی بدی میخوای کانکنت بشی نمیتونه !!! خطای time out میگیره
    برنامه رو میبندی ، پورت هنوز بسته نشده دوباره کانکنت میشی خطای No connection could be made because the target machine actively refused it ip:port
    اعصاب برات نمیذاره
    کلا اتصال با سرور خیلی کند صورت میگیره در صورتی که برنامه هایی هستند در کمتر از 3 ثانیه به سرور وصل میشن !!!! ارسال و دریافت هم خیلی سریع انجام میشه.

  9. #7
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

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

    برای اغلب کارهای معمول تکنولوژی WCF راه کارهای ساده تر با توسعه سریعتر و مطمئن تری در اختیارتان قرار میدهد.

    پیشنهاد میکنم بجای استفاده مستقیم از سوکت ها روی WCF تمرکز و تحقیق کنید، انشاا... زودتر و با ضریب اطمینان بیشتری به هدف تان خواهید رسید.

    تاپیکی در خصوص WCF
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    (((
    تاپیکی در خصوص Socket
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    )))

    موفق باشید.

  10. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  11. #8
    داره خودمونی میشه Ehsan-l-able's Avatar
    تاريخ عضويت
    Sep 2010
    محل سكونت
    ایران
    پست ها
    121

    پيش فرض

    تو برنامه نویسی سوکت خیلی به این خطای برخوردم :

    A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.10.1:9000

    توی localhost یا آی پی 127.0.0.1 اجرا میکنم جواب میده ، اما تو شبکه جواب نمیده ! فایروال هم غیر فعال کردم نشد !

  12. #9
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    خطای شما مربوط به عدم برقرای ارتباط (در زمان مقرر) است.
    شاید افزایش timeout کمکی کند ولی یاخط ارتباطی و یا کدتان مشکل دارد و بدون دیدن کد نظر دقیقی نمیتوان داد.

  13. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  14. #10
    داره خودمونی میشه Ehsan-l-able's Avatar
    تاريخ عضويت
    Sep 2010
    محل سكونت
    ایران
    پست ها
    121

    پيش فرض

    سلام
    خطای شما مربوط به عدم برقرای ارتباط (در زمان مقرر) است.
    شاید افزایش timeout کمکی کند ولی یاخط ارتباطی و یا کدتان مشکل دارد و بدون دیدن کد نظر دقیقی نمیتوان داد.
    این سورس کد خیلی ساده :
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    اما من سورس های دیگه ای هم امتحان کردن وقتی روی یک سیستم اجرا میکنم و آی پی سرور رو 127.0.0.1 میدم مشکلی نداره اما در LAN با دو تا سیستم همین خطا رو میگیره !!!!

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •