محبوبترینها
قیمت انواع دستگاه تصفیه آب خانگی در ایران
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
خرید بیمه، استعلام و مقایسه انواع بیمه درمان ✅?
پروازهای مشهد به دبی چه زمانی ارزان میشوند؟
تجربه غذاهای فرانسوی در قلب پاریس بهترین رستورانها و کافهها
دلایل زنگ زدن فلزات و روش های جلوگیری از آن
خرید بلیط چارتر هواپیمایی ماهان _ ماهان گشت
سیگنال در ترید چیست؟ بررسی انواع سیگنال در ترید
بهترین هدیه تولد برای متولدین زمستان: هدیههای کاربردی برای روزهای سرد
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1831863586
کار کردن با سوکت در asp.net
واضح آرشیو وب فارسی:سایت ریسک: dogtag02-06-2008, 11:53 AMُسلام من می خوام با سوکت وصل بشم به یه صفحه (مثلاً forum.p30wold.com:80) و براش این رو بفرستم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! و هر چی میده رو بگیرم و بدم به Response.write که بریزه اش رو صفحه همون طور که می دونید، این کد، دقیقاً همون کاریه که Browser تون وقتی که بالاش می نویسی: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خودکار همین ها رو انجام میده من تا اینجای کار تونستم کانکت بشم، درخواست رو write کنم، طول جواب اومده از سرور رو هم بگیرم ولی نمی تونم بخونمش مثل این می مونه که تو یه حلقه بی نهایت گیر کنی این یه ور ماجراست این هم حل بشه خودش کلی ه --------------------------------------------------------------------------------- قضیه یه اینور هم داره: 1- چجوری کانکشن Async بسازم؟ و ازش چجوری استفاده کنم؟ 2- اگر بخوام 1000 نفر هم زمان از این استفاده کنم، باید چه کنم؟ مرسی منتظر جواب اساتیدی چون ultimator و h2 و اگر بشه، shalineh توی PHP خیلی ماجرا راحت تر از اینجا است دوباره مرسی _H2_23-06-2008, 01:59 AMسلام هنوز منتظر جواب هستید و مشکلتان حل نشده؟؟؟؟؟ هم میتوانم نمونه مستقیم و البته کمی طولانی سوکت را برایتان بگذارم و هم نمونه راحت یک یا دوخطی که آدرس را بگیرد و String حاوی Html را باز گرداند...؟؟؟؟ ضمناً دوستان دیگر هم که در این تالار قبلاً سوالی پرسیده بودند، من از امروز بیشتر وقت انلاین بودم دارم، اگر مشکلشان حل نشده و هنوز ادامه دارد تاپیک را فعال کنند، اگر بلد بودم و سوادم رسید و تواستم و در حد وقت آزادم سعی میکنم جواب دهم، به هرحال میتوانند تیری در تاریکی بزنند !!!!! dogtag23-06-2008, 02:26 AMچه خوب شد که بالاخره وقت استاد آزاد شد. (بین خودمون بمونه: ) نیما خیلی زیاد برای اینجا دل نمی سوزونه. بچه ی خوبیه ها ولی داره کار درست رو می کنه و زیاد وقت نمی ذاره شلینه هم که مزدوج شد و رفت، شما هم که نبودی ولی از فردا دوباره می چسبم به net. و تا توپ یاد نگیرم، ولت نمی کنم (یقه (یا یغه) ات رو بده من!) آقا بذار اصل ماجرا رو بگم که راحت تر باشیم. ببین، من یه سرور می شناسم که بهش وصل میشی و بهش میگی "hello, I am mr. X" و میگه که خوش تشریف آوردی عزیزم بعد یه چیز هایی می فرسته که مثلاً میگه که "My name is Server" و بعد یه packet دیگه میفرسته و می گه که "at your service" از اون به بعد، چیز خاصی رو نمی فرسته ولی مثلاً اگر که اتفاق خاصی بیافته مثلاً یه packet می فرسته و میگه "Iraq war began" در غیر این صورت دیگه ساکت می مونه و منتظر میشه تا من سوال بپرسم مثلاً من می گم "?how old are you" بعد بهم میگه که "older than you" حالا اگر اولش من بگم که من آقای Y هستم، جواب های سرور فرق می کنه. این چیز هایی که گفتم همه اش چرت و پرت بود و هیچ جمله ی انگلیسی رد و بدل نمیشه و فقط کاراکتر های عجیب هستند که این وسط همین منظور ها رو می رسونند مثلاً: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! و این که سوکتیه نه http یی --- تا اینجا رو داری؟ حالا می خوام این برای 500 یوزر همزمان هم جواب بده تا اینجاش رو که پیش بریم تازه اصل مطلب رو می گم نه، بذار الان بگم این 500 تا یوزر باید بتونند با فاصله ی زمانی یا بدون فاصله با اون سرور ارتباط بر قرار کنند. یعنی: Client + Server + 3rd Party Server این سوکتی که من گفتم از نوع Client ه ها! یه وقت اشتباه برداشت نکنی. مرسی و ببخشید منتظرم _H2_23-06-2008, 08:24 PMسلام ...دل نمی سوزونه. بچه ی خوبیه ها ولی داره کار درست... بابا، بچه مردم میخواهد پول دربیاره! ماکسیما بخره! چه کارش داری؟! :31: راستی همینطوری و بدون دلیل خاصی یاد "تکنیک برتر" افتادم، زمانی که من اینجا عضو شدم ایشان خیلی فعال بودند، ولی دیگه خبری نیست؟؟!!!نمیدانم پاقدم ما بوده؟؟؟ اخرین فعالیتش مربوط به سه ماه پیش است!!!!! ========== خوب حالا مشکل کجا است؟؟؟!!! شما اصلاً نتوانسته اید در دات نت با یک سوکت به یک سوکت دیگر وصل شوید و اطلاعات رد و بدل کنید؟؟؟؟ یا توانسته اید ولی در 500 تاش مشکل دارید و به خون ویندوز تشنه اید؟؟؟ dogtag23-06-2008, 08:45 PMگفتم که من این رو با Php نوشتم (فکر نکن که فقط کد سوکت بود ها! تفسیر حرف های سرور هم بود که حجمش خیلی رفت بالا) حالا می خوام مثل یه بچه ی خوب بشینم تو کلاس درس استاد H2 تا بهم یاد بده که چجوری: 1- سوکت برای اتصال 1 نفر درست کنم (فقط جنبه ی آموزشی داره) 2- چجوری 500 نفر رو متصل کنم مرسی Ultimator23-06-2008, 10:58 PMبابا، بچه مردم میخواهد پول دربیاره! ماکسیما بخره! چه کارش داری؟! :31::31::31: ! بذار کنکورمان رو بدیم ماکسیما و اینا خریدن پیش کش ! علم آموزی مهمتر از پروژه تحویل دادنه ! :31::31: مسیح جان بابت پست نامربوط عذر میخواهم ! داشتم رد میشدم گفتم عرض ادبی بنمایم ! اگر سنگینی مینماید بفرما حذفش کنم ! من رفتم کنکور ! راستی سلام ! _H2_25-06-2008, 01:00 AMسلام ! بذار کنکورمان رو بدیم د نگرفتی داداش! اتفاقاً چون این مطلب را میدانستم آن را گفتم، (خودتان در یک تاپیک دیگر گفته بودید!) کمی بیشتر فکر کنید متوجه میشوید که بی راه نگفتم! :31::46::21::3::blink: ========== جناب dogtag: توضیح کلی کمی طولانی میشود، در نتیجه تصمیم گرفتم تا مثالی برایتان حاضر کنم، که متاسفانه وقت نشد تکمیلش کنم. انشا ا... فردا شب که برگشتم خانه، تکمیلش میکنم و برایتان میگذارم.:11: با مفاهیم شی گرایی و چند ریختگی آشنایی دارید؟؟؟ چون یک جایش جون میده برای وراثت! ولی گفتم شاید کمی پیچیده به نظر برسد و از خیرش گذشتم. یک برنامه exe است که یک Chat ساده متنی را بین کلاینت ها و سرور شبیه سازی میکند. گرچه exe است ولی اصولش با asp.net فرقی ندارد، به نظرم برای شروع یادگیری طریقه استفاده از سوکت ها در دات نت، اینطوری ساده تر است. اگر واقعاً این نمونه ساده را متوجه شوید و تک تک خطوطش را درک کنید و بتوانید خودتان بنویسید، گمانم کل مشکلاتتان با سوکت های دات نت حل شود، انشا ا... تا فردا. :10: dogtag25-06-2008, 01:05 PMممنون H2 جان اگر مثالت خوب باشه که عالیه. چون اگر کدی رو خط به خطش رو نفهمم، یه جور هایی ازش بدم میاد! اون وراثت و اینها رو هم احتمالاً بلدم. یه چیزی خوندم که توضیحاتی داده بود و این کلماتی که میگی هم توش بود :دی احتمالاً چون اسم فارسی ه نمی دونم. آخه منبعم انگلیسی ه. نتیجه ی تحقیقات خودم (که برای پیدا کردنشان فحش شنیدم و کتک خوردم) را می نویسم: سوکت نویسی در Win App با Web خیلی فرق داره. حداقل به دلیل این که اگر بخوای Async Socket بنویسی، Win App تا زمانی که برنامه اجراست می تونه منتظر جواب بمونه ولی تو Web باید کار رو سریع تموم کنی و نتیجه رو اعلام کنی. (شاید یه حلقه ی بینهایت جواب بده) بهم پیشنهاد شد که Windows Service بنویسم. چون محدودیت سرور ساید رو از بین می بره ولی نمی دونم اون رو چجوری نصب کنم و چجوری در برنامه ام ازش استفاده کنم. با این حال نمی دونم که چجوری می تونم 500 تا سوکت Async رو با Windows Application درست کنم. من تو PHP اینجوری کار کردم : با یه صفحه اسم طرف رو می گرفتم و با آجاکس می دادم به این صفحه ی سوکت دارم و از اون به بعد دیگه صفحه ی سوکت با بقیه ی جا ها هیچ ارتباط مستقیمی نداشت و این وسط یه DB داشتم که هر چیزی که می شد رو تو اون می نوشتم و برنامه ام مثلاً هر 30 ثانیه میومد DB رو بررسی می کرد تا ببینه کسی چیزی گفته یا نه. ولی اینجا احتمالاً روش بهتری هم هست. الان بقیه اش یادم نمیاد. ولی شما لطف کن این 1 کار ما رو راه بنداز، ایشالله از خجالتت در میایم :11: مرسی _H2_25-06-2008, 11:07 PMسلام چون اگر کدی رو خط به خطش رو نفهمم، یه جور هایی ازش بدم میاد! انشا ا... شرمندتان نشوم، هر سوالی در خصوص کد داشتید بپرسید. اون وراثت و اینها رو هم احتمالاً بلدم. من هم استفاده گردم، البته وراثت نیست، پلی مورفیزم است، به نظر من که ساده تر شده. کد سرور و کلاینت را کاملاً مجزا و واضح در دو کلاسس نوشتم که با یک رابط مشترک توسط یک پنجره واحد مدیریت میشوند سوکت نویسی در Win App با Web خیلی فرق داره تا حدودی درست است و باید به نکات خاصی دقت شود، ولی در کل و حداقل در دات نت تفاوت فاحشی وجود ندارد و کلاسسها و متدها مشترک است، فقط باید به ریسمان اجرا کننده دقت داشت. که Windows Service بنویسم بد نیست، ولی یک نوع exe است ! سرور باید اختصاصی باشد و بعد هم باید فکر کرد که با توجه به کارتان WinService بهتر است یا WinApp . در مورد 500 سوکت هم، فقط یک حلقه for ناقابل میخواهد تا به تعداد مورد نیاز دستور ساخت و اتصال را تکرار کند. شما میخواهید در یک رایانه 500 سوکت کلاینت درست کنید؟ یا قرار است 500 کامپیوتر کلاینت به سرورتان متصل شوند؟ ========== در آخر لازم میدانم متذکر بشم که این مثال خیلی ساده است (exe اش 16 کیلو است) و هیچ مکانیسمی مقابله با خطایی در نظر گرفته نشده. یکم کلی تر نوشتم تا برای دیگران هم قابل استفاده باشد. باید حتماً اول نمونه سرور کانکت و آماده باشد و بعد کاینت ها متصل شوند. نمونه سرور باید واحد باشد ولی تعداد کلاینت ها میتواند هر چندتا باشد. انشا ا... با یک نگاه.... !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! dogtag25-06-2008, 11:34 PMواقعاً ممنون و شرمنده می دونم که مجانی وقت گذاشتن برای دیگران یعنی چی. مخصوصاً وقتی که مثل من خنگ و تازه کار هم باشند! من میخواهم در یک رایانه 500 سوکت کلاینت درست کنم. فکر کنم مشکلی نباشه. چون یه سرور می تونه حداکثر 500 تا end point داشته باشه. برای مثال ممنون. (شب کنکور دارم کد NET. آنالیز می کنم!!!!) مشکل من با همین ریسمان ها و این جور چیز هاست. یعنی نمیشه تو یه فایل aspx ، تعداد 500 کانکشن درست کرد؟ مثلاً از دیتابیس بخونه و هر وقت که تو فیلدی به نام command نوشته بود new X بره یه ریسمان درست کنه و یه کانکشن بده توش با نام آقای X و از اون به بعد مثلاً کامند ها اینجوری باشه X:Hi Server که اون رو بخونه و بفهمه که باید به سوکتی که تو ریسمان آقای X هست، جمله ی Hi Server رو بفرسته؟ _H2_25-06-2008, 11:55 PMسلام در دات نت هر کاری که عشقتان میکشد میتوانید انجام دهید، رایانه در خدمت شما است، از بیخ و بن! چت میخواهید بسازید؟ _H2_25-06-2008, 11:59 PMسلام ...شب کنکور دارم کد NET. آنالیز می کنم... آخرش هم بلای من سرت در می آید و دیپلمه میمونی! فقط من اون موقع که جوون بودم(!) شب امتحانام میشستم کتابهای الکترونیک میخوندم. بشین درس بخوان ، مگو چیست نمره، که سرمایه جاودانه است مدرک! (البته بعد از پارتی!) :31: dogtag26-06-2008, 12:44 PMممنون از جوابت حالا میشه با جزئیات بیشتر توضیح بدید؟ دارم اونی که دادی رو می خونم. ولی شما هم لطف کن این سوالات آخرم رو یه جوابی بده. مرسی ---- چت میخواهید بسازید؟ از کجا فهمیدی؟ :دی _H2_27-06-2008, 04:33 PMسلام میبخشید طول کشید، زیاد حال و حوصله .... سعی کردم متدهای کلیدی و اصلی را تشریح کنم. :11: ولی با هر متد دیگری هم مشکل داشتید، مشکلی نیست! بپرسید.. ضمناً یک کم کد را تغییر دادم، در حد چند خط، پیشنهاد میکنم، مجدداً آخرین نسخه را دانلود کنید. - کلاس System.Net.Sockets.Socket اصلی ترین کلاسس مبنا جهت مدیریت سوکت ها است. - کلاس System.Net.Sockets.TcpClient یک سوکت را باز کرده و برای کار تحت پروتکل TCP/IP و به صورت کلاینت مهیا میکند. متد شروع کار Connect متد پایان کار Close خصوصیتی که سوکت را برمیگرداند هم Client است - کلاس System.Net.Sockets.TcpListener یک سوکت را باز کرده و برای کار تحت پروتکل TCP/IP و به صورت سرور مهیا میکند. متد شروع کار Start متد پایان کار Stop خصوصیتی که سوکت را برمیگرداند هم Server است ============================== System.Net.Sockets.Socket متد Receive جهت دریافت اطلاعات، با ریسمان جاری و به صورت بلوکه شده میباشد. متد BeginReceive جهت دریافت اطلاعات، به صورت غیر همزمان و غیر بلوکه شده است. متد Send جهت ارسال اطلاعات، با ریسمان جاری و به صورت بلوکه شده میباشد. متد BeginSend جهت ارسال اطلاعات، به صورت غیر همزمان و غیر بلوکه شده است. پارامترهای یکی از Overload های متد BeginReceive و Send را که در برنامه نمونه استفاده شده در زیر بررسی میکنیم، Receive و BeginSend هم همین پارامترها را دارند. Send========== !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این Overload متد Send، فقط یک آرایه بایتی میگیرد و آن را ارسال میکند، همه اطلاعات دیگر را باید به آرایه ای از بایتها تبدیل کرد؛ که در کد نمونه ما متن را با متد System.Text.Encoding.UTF8.GetBytes تبدیل کردیم. BeginReceive========== !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! - پارامتر buffer یک بافر را برای ریختن اطلاعاتی دریافتی در آن تحویل متد BeginReceive میدهد. - پارامتر offset نقطه شروع و size تعداد بایتهایی را مشخص میکند که متد BeginReceive اجازه دارد از buffer استفاده کند، در حالت عادی، offest صفر است و size همان مقدار گنجایش buffer است، یعنی متد مذکور میتواند از کل buffer استفاده کند. - پارامتر socketFlags یک سری پرچم های بیتی را برای سوکت تنظیم میکند که معمولاً مقدار None کفایت میکند. - پارامتر callback هم یک اشاره گر یا handler از تابعی است که باید در زمان اتمام دریافت، اجرا شود، میتوانید آن را مثل رویداد Click یک دکمه فرض کنید، یعنی هر زمان داده ای دریافت شود، این این متد اجرا شود. در VB میتوان handler تابع یا به قول دات نت Delegate یک تابع را با دستور AddressOf به دست اورد. این handler باید امضای AsyncCallback را داشته باشد، یعنی باید با کدی مشابه زیر تعریف شوده باشد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! پارامتر state بیشتر حالت اختیاری دارد و البته بسیار مفید است، این پارامتر یک مقدار را میگیرد، هر چه خواستید، یک Integer یا یک String یا هر Object دیگری و هیچ کاری با این مقدار انجام نمیدهد!!!! وقتی کار دریافت اطلاعات تمام شد، و تابع callback اجرا شد، عین همین مقداری را که به state داده بودید در ar.AsyncState متد هدف callback تحویل میدهد. این قابلیت برای تشخیص این چه دیتایی از کجا رسیده بسیار مهم است، گرچه شاید در کد کلاینت چندان فایده ای نداشته باشد. ولی کد سرور را مد نظر بگیرید، متد callback که رسیدن اطلاعات را تشخیص میدهد، چگونه بفهد که این اطلاعات از کدام کلاینت آمده؟! و به خاطر کدام دستور BeginReceive که برای کلاینتی اجرا شده، حالا جوابی رسیده؟! در این حال شما میتوانید در state، سوکت، ایندکس کلاینت، ip کلاینت و یا شی ای که اطلاعات کلاینت را در آن نگاه میدارید (در کد نمونه کلاسس دست ساز ClientItem) به BeginReceive پاس دهید تا بعد که متد مورد هدف callback اجرا شد، بتوانید تشخیص دهید به خاطر رسیدن دیتا از کدام کلاینت اجرا شده. === متد callback باید پارامتر ar As System.IAsyncResult را که دریافت کرده به متد EndReceive سوکت اولیه بدهید تا چرخه BeginReceive و EndReceive تکمیل شود. متد EndReceive یک Integer پس میدهد که نمایانگر تعداد بایتهای دریافت شده است. یعنی اطلاعات جدید دریافت شده از نقطه offest مشخص شده در BeginReceive شروع و به تعداد همین عدد Integer ادامه مییابد. باید توجه داشت که یک بار صدا زدن BeginReceive، فقط یک دریافت اطلاعات را قفل میکند و برای دریافت مدام داده ها باید چرخه BeginReceive و EndReceive را مدام تکرار کرد. ============================== System.Net.Sockets.TcpListener شاید مهم ترین متد در این کلاسس BeginAcceptSocket باشد، این متد از نظر اصولی خیلی شبیه BeginReceive کلاس Socket است. این متد به جای خبر دادن رسیدن دیتا، شما را از اتصال یک کلاینت جدید آگاه میکند. یعنی در سرور با اجرای این متد، سوکت کلاینتی که بخواهد وصل شود، تشخیص داده شده و با اتصالش موافقت میشود. متد مذکور فقط دو پارامتر میگیرد !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! که کار این دو پارامتر دقیق مثل پارامترهای مشابه در متد Socket.BeginReceive است، که پیش از این شرح داده شد، فقط handler پارامتر callback باید به متدی اشاره کند کهاتصال کلاینت های جدید را مدیریت میکند. در این متد callback باید متد EndAcceptSocket با پارامتر ar As System.IAsyncResult ورودی صدا زده شود تا چرخه BeginAcceptSocket و EndAcceptSocket تکمیل شود. متد EndAcceptSocket چرخه را تکمیل میکند و یک وهله از کلاسس Socket را باز میگرداند، که این نمونه یک اتصال به Socket نظیر کلاینتش است و هر چیزی که با این نمونه Socket ارسال و دریافت شود، فقط صرفاً به همان تک کلاینت مربوط میشود. باید پس از تحویل گرفتن این نمونه Socket ، روی آن یک BeginReceive اجرا کنید، تا بتوانید به ارسالات کلاینت گوش فرا دهید. dogtag27-06-2008, 07:48 PMخیلی خیلی خیلی خیلی ممنون استاد آقا اگه موافق باشی دیگه این تاپیک رو ادامه ندیم! آخه اصلاً راضی نیستم که برای من، شما به زحمت بیافتید و انقدر تایپ کنید. واقعاً شرمنده ام. توضیحات بسیار مبسوط (اگه درست نوشته باشم :دی) و خوبی بود امروز آنالیزش رو تموم می کنم. البته تعریفات ابتدایی رو تقریباً خوب بلدم ولی مشکلم محدودیت های Server Side ه. الان من اگر بخوام اون چت رو درست کنم باید چه کنم؟ اون برنامه که بهم دادید (حداقل قبل از آپدیت شدنش. آخه این جدیده رو هنوز ندیدم.) با باز کردن یک سرور و دو کلاینت، این اتفاق می افته: کلاینت 1 که حرف بزنه، بدون فرق برای سرور، می نویسه که "فلان" (یعنی دقیقاً هر چیزی که گرفته شده رو می نویسه) و بد تر از اون، سرور که یه چیزی رو بفرسته، هم کلاینت 1 و هم کلاینت 2، با هم دریافت می کنند حالا سوالات اینه: 1- با Thread و اینجور چیز ها نمیشه سرور رو همیشه اجذا نگه داشت که فشار خیلی زیاد به سرور نیاد و با این پروژه ی من کار بکنه؟ 2- چجوری بفهمه که کی، چی گفته (البته تو آموزش آخر تون، این رو گفتید. باید دقیق تر بخونمش) _H2_28-06-2008, 03:07 AMسلام آقا اگه موافق باشی دیگه این تاپیک رو ادامه ندیم! من مشکلی ندارم، و تا اتمام مشکلات شما در حد وقتم در خدمت هستم، ولی اگر شما مشکل دارید و نمیتوانید روی قضیه وقت بگذارید یا نمیخواهید مثل من.... تاپیک خودتان است، مختارید! الان من اگر بخوام اون چت رو درست کنم باید چه کنم؟ اصل تفاوت در asp.net به دو چیز مربوط میشود 1- به محل نگه داری اشیا مربوط میشود که دیگر نمیتوان در داخل webpage ها باشد، باید تمام متغیرها اصلی یا به طور کلی نمونه کلاسس CClientChat و CServerChat را به مکان امنی مثل Appilication منتقل کنید. 2- اگر میخواهید پیغام های جدید دریافتی در صفحات aspx منعکس شود، حتماً میدانید که در هیچ پلتفرم تحت وبی نمیتوان با دستور سمت سرور، کلاینت را Refresh کرد، ولی میتوان با کد js (که اگر تلفیق با ajax شود، فوق العاده عالی میشود) به صورت تایمیک، صفحه به سایت مراجعه کند و در صورت وجود داده جدید، خود را آپدیت کند. کلاینت 1 که حرف بزنه، بدون فرق برای سرور، می نویسه که "فلان" (یعنی دقیقاً هر چیزی که گرفته شده رو می نویسه) اولاً که منظورتان را نمیفهمم، یعنی اون میگه، بادمجان، این باید بنویسه، سیب زمینی؟! دوماً این فقط یک کد نمونه است، مثل این میماند که من یک کد MsgBox بنویسم که عبارت Hello را نشان دهد و شما بگویید، این خوب نیست، چون من میخواهم عبارت How Are You را نشان دهد!!!!!!!!! کد دست شما است، شما برنامه نویس هستید، هرکاری میخواهید بکنید، مشکلی وجود ندارد، فراموش نکنید، باور کنید که شمائید که باید به رایانه خنگ بگویید چه کار کند، نه ان! و بد تر از اون، سرور که یه چیزی رو بفرسته، هم کلاینت 1 و هم کلاینت 2، با هم دریافت می کنند باز هم همان جوابتان میشود، شما برنامه نویس هستید! در اصل من خودم اینکار را با یک حلقه for انجام دادم (فایل CServerChat جدید، خط 62) یک حلقه ساده for که عمل send را برای تک تک کلاینت ها انجام میدهد، نمیخواهید؟ برش دارید! کار سختی نیست. در واقع در کار سوکتی شما به یک خط ارتباط دو سویه بین کلاینت و سرور میرسید که تمام نقل و انتقالات دست شما است. - حال مثلاً شما نیاز دارید تا سرور پیغامی را به تمام کلاینت ها بفرستد (مثل کاری که من کردم) می آیید و یک حلقه for میگذارید تا عمل ارسال برای همه انجام شود. - یا نیاز پیدا میکنید، یک کلاینت بتواند برا یک کلاینت دیگر اطلاعات بفرستد و بگیرد، برای این کار هم سرور را میانجی میکنید، کلاینت اطلاعات را به سرور میفرستد و در بخش مشخصی از دیتا ها مشخص میکند که این بسته باید برای فلان یکی کلاینت ارسال شود، و کد سرور بسته را به کلاینت دیگر میفرستد، یعنی از این دست میگیرید و از آن دست به دیگری تحویل میدهد مجدداً تاکید میکنم، شما یک ارتباط امن و کاملاً مشخص بین سرور و هر تک کلاینت دارید، که وقتی پیغامی فرستاده یا دریافت میشود به وضوح مشخص است از کدام کلاینت است و به راحتی میتوانید برای سادگی بیشتر به هر کلاینت یک ID عددی یا رشته ای هم نصبت دهید. مثل یک تلفن فرض کنید، که بین هر نمونه کلاینت و سرور یک خط تلفن فعال وصل و آماده است و میتواند هر دیتای بایتی را رد و بدل کند، یک خط تلفن مشخص و ایزوله بین هر کلاینت با سرور. OK ؟؟؟؟ چجوری بفهمه که کی، چی گفته در کد نمونه من برای هر کلاینت یک وهله از کلاسس دست ساز ClientItem را میسازم تا اطلاعات آن کلاینت را نگاه دارد، که در کد من فقط دو پارامتر اصلی یعنی Socket و Buffer نگاه داشته میشود، ولی شما میتوانید هر آیتمی به این کلاسس اضافه کنید مثلاً UserName یا FirstName یا LastDateTimeDialog یا هر چیز دیگری که بخواهید... طبیعی است که این موارد اضافه را هم باید در اولین بار وصل شدن یک کلاینت پر کنید (فایل CServerChat جدید، خط 74) یا با هر روش دیگر، مثلاً میتوانید برای کدهای خودتان اینطور قرارداد کنید که پس از اتصال، اولین داده ارسالی یک String باشد که شامل UserName کلاینت باشد، و کلاینت به محض اتصال خودش این را ارسال کند.... اینها را که انجام دادید، دیگر فکر کنم قبول داشته باشید که داشتن مقدار ClientItem (و طبیعتاً متغیرهای داخلش) برای شناسایی کلاینت در هر زمان کافیست. خوب هر زمان که داده جدیدی دریافت شود، کد نمونه جاری وهله ClientItem اش را به دست می آورد (فایل CServerChat جدید خط 102) به راحتی تمام اعضای ClientItem به محض رسیدن داده جدید در اختیار شما قرار میگیرد و شما میتوانید رویش عملیات مورد نظر خود را انجام دهید. ... Thread و اینجور چیز ها نمیشه سرور رو همیشه اجذا نگه داشت که فشار خیلی زیاد به... به لطف دات نت زیاد هم نمیخواهد نگگران ایجاد ریسمان و مدیریت ان باشید.! وقتی از متدهای سری BeginXXXXXX و EndXXXXXX استفاده میکنید، در اصل (معمولاً) خود دات نت یک ریسمان دیگر ساخته و مسئول انجام عمل فوق الذکر میکند و این یعنی پردن کارها به ریسم سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1823]
-
گوناگون
پربازدیدترینها