Delphi-Clinic
پنج شنبه 22 اردیبهشت 1384, 11:55 صبح
مقدمه ای بر پروتکل TCP در .NET :
برنامه نویسی پورت در دات نت به نسبت مدلهای قبلی برنامه نویسی بسیار بهینه شده است.
قبلا بیشتر برنامه نویسان Visual C++ از دو کلاس CSocket و CAsyncSocket برای برنامه نویسی پورت استفاده می کردند بعضی هم از کلاسها و کتابخانه های متفرقه بهره می بردند.
در گذشته هیچ روش برنامه نویسی سطح بالایی برای برنامه نویسی TCP وجود نداشت (البته منظور من در برنامه نویسی در زبانهای مایکروسافتی است نه دلفی)ما برنامه نویسان مجبور بودیم از توابع مشکل وکلاسهای سطح پائین که کار با آنها سخت است استفاده کنیم.
در دات نت یک مجموعه کامل از کلاسها و توابع در namespace جامعی بنام System.Net.Sockets گردآوری شده است.
این مجموعه شامل کلاسهای سطح پائین مثل کلاس Socket و همچنین کلاسهای سطح بالا مانند TCPClient و TCPListener می باشد.
هر دو کلاس فوق الذکر از یک مدل Stream برای ارسال و دریافت اطلاعات استفاده می کنند. کلاسSocket از یک روش Byte-Level برای انتقال اطلاعات استفاده می نماید.
در کلاسهای TCPClient و TCPListener تمام ارتباطات بین Client و Server براساس Stream است که توسط یک عضو از کلاس بنام NetworkStream مدیریت می شود.
کلاس TCPClient:
این کلاس ارتباطات سمت Client را برای سرویس دهی TCP مدیریت می کند. TCPClient براساسکلاس Socket ایجاد شده است تا سرویس دهی TCP را در سطح بالاتر و ساده تری مدیریت نماید.
این کلاس دارای یک عضو خصوصی (private member) بنامه m_ClientSocket است که برای ارتباط با TCP Server مورد استفاده قرار می گیرد.
کلاس TCPClient متدهای ساده ای را برای ارتباط با سایر برنامه ها دارا می باشد.
خصوصیات و متدهای مهم کلاس TCPClient به قرار زیر است:
1 – خصوصیات عمومی :
LingerState : این خصوصیت نوع داده ای بنام LingerOption را نگه می دارد.
LingerOption اطلاعاتی درباره مدت زمان بازبودن اتصال پس از بسته شدن پورت رانگهداری می کند.
NoDelay : این خصوصیت یک مقدار bool را نگه می دارد که با تنظیم آن می توان تعیین نمود که پورتتا پر شدن کامل بافر برای ارسال یا دریافت اطلاعات صبر کند یا نه.
اگر این خصوصیت false باشد TCP تا پر شدن بافردر ارسال Packet ها تاخیر ایجاد می کند این امر مانع ارسال Packet های کوچک به تعداد زیاد در شبکه شده و از ترافیک شبکه می کاهد.
RecieveBufferSize : این خصوصیت یک مقدار int رانگه می دارد که تعیین کننده سایز بافر دریافت کننده اطلاعات بر حسب بایت است.
RecieveTimeout: مدت زمان انتظار TCPClient از زمان ایجاد تا دریافت اولین Packet را برحسب میلی ثانیه تعیین می کند.این خصوصیت نوع داده int را نگه می دارد.
در صورت عدم دریافت هیچ Packet معتبری یک کلاس Exception بنامSocketException صدا زده میشود.
SendBufferSize : این خصوصیت نوع داده int رانگه می دارد که تعیین کننده سایز بافر خروجی برحسب بایت است.
SendTimeout :این خصوصیت نوع داده int را نگه می دارد که مدت زمان انتظار TCPClient رابرای دریافت تاییدیه اطلاعات فرستاده شده از TCPClient به سرور روی شبکه را برحسب میلی ثانیه معین می کند.
در صورت عدم دریافت هیچ پاسخی یک کلاس Exception بنام SocketException فراخوانی می شود.
2- متدهای عمومی:
Close() : ارتباط TCP را قطع می کند.
Connect() : ارتباط را با سرور TCP برقرار می سازد.
GetStraeam() : این متد یک NetworkStream مورد استفاده بین Client و Server را باز می گرداند.
3- خصوصیات حفاظت شده :
Active :
نوع: bool
تعیین کننده وجود یا قطع یک ارتباط فعال با سرور است.
Client :
نوع : Socket
پورت استفاده شده توسط TCPClient را معین می کند. چون این خصوصیت Protected می باشد پورتمورد استفاده فقط وقتی قابل دسترسی است که شما یک کلاس دلخواه از TCPClient به ارث ببرید.
پایان قسمت اول
برنامه نویسی پورت در دات نت به نسبت مدلهای قبلی برنامه نویسی بسیار بهینه شده است.
قبلا بیشتر برنامه نویسان Visual C++ از دو کلاس CSocket و CAsyncSocket برای برنامه نویسی پورت استفاده می کردند بعضی هم از کلاسها و کتابخانه های متفرقه بهره می بردند.
در گذشته هیچ روش برنامه نویسی سطح بالایی برای برنامه نویسی TCP وجود نداشت (البته منظور من در برنامه نویسی در زبانهای مایکروسافتی است نه دلفی)ما برنامه نویسان مجبور بودیم از توابع مشکل وکلاسهای سطح پائین که کار با آنها سخت است استفاده کنیم.
در دات نت یک مجموعه کامل از کلاسها و توابع در namespace جامعی بنام System.Net.Sockets گردآوری شده است.
این مجموعه شامل کلاسهای سطح پائین مثل کلاس Socket و همچنین کلاسهای سطح بالا مانند TCPClient و TCPListener می باشد.
هر دو کلاس فوق الذکر از یک مدل Stream برای ارسال و دریافت اطلاعات استفاده می کنند. کلاسSocket از یک روش Byte-Level برای انتقال اطلاعات استفاده می نماید.
در کلاسهای TCPClient و TCPListener تمام ارتباطات بین Client و Server براساس Stream است که توسط یک عضو از کلاس بنام NetworkStream مدیریت می شود.
کلاس TCPClient:
این کلاس ارتباطات سمت Client را برای سرویس دهی TCP مدیریت می کند. TCPClient براساسکلاس Socket ایجاد شده است تا سرویس دهی TCP را در سطح بالاتر و ساده تری مدیریت نماید.
این کلاس دارای یک عضو خصوصی (private member) بنامه m_ClientSocket است که برای ارتباط با TCP Server مورد استفاده قرار می گیرد.
کلاس TCPClient متدهای ساده ای را برای ارتباط با سایر برنامه ها دارا می باشد.
خصوصیات و متدهای مهم کلاس TCPClient به قرار زیر است:
1 – خصوصیات عمومی :
LingerState : این خصوصیت نوع داده ای بنام LingerOption را نگه می دارد.
LingerOption اطلاعاتی درباره مدت زمان بازبودن اتصال پس از بسته شدن پورت رانگهداری می کند.
NoDelay : این خصوصیت یک مقدار bool را نگه می دارد که با تنظیم آن می توان تعیین نمود که پورتتا پر شدن کامل بافر برای ارسال یا دریافت اطلاعات صبر کند یا نه.
اگر این خصوصیت false باشد TCP تا پر شدن بافردر ارسال Packet ها تاخیر ایجاد می کند این امر مانع ارسال Packet های کوچک به تعداد زیاد در شبکه شده و از ترافیک شبکه می کاهد.
RecieveBufferSize : این خصوصیت یک مقدار int رانگه می دارد که تعیین کننده سایز بافر دریافت کننده اطلاعات بر حسب بایت است.
RecieveTimeout: مدت زمان انتظار TCPClient از زمان ایجاد تا دریافت اولین Packet را برحسب میلی ثانیه تعیین می کند.این خصوصیت نوع داده int را نگه می دارد.
در صورت عدم دریافت هیچ Packet معتبری یک کلاس Exception بنامSocketException صدا زده میشود.
SendBufferSize : این خصوصیت نوع داده int رانگه می دارد که تعیین کننده سایز بافر خروجی برحسب بایت است.
SendTimeout :این خصوصیت نوع داده int را نگه می دارد که مدت زمان انتظار TCPClient رابرای دریافت تاییدیه اطلاعات فرستاده شده از TCPClient به سرور روی شبکه را برحسب میلی ثانیه معین می کند.
در صورت عدم دریافت هیچ پاسخی یک کلاس Exception بنام SocketException فراخوانی می شود.
2- متدهای عمومی:
Close() : ارتباط TCP را قطع می کند.
Connect() : ارتباط را با سرور TCP برقرار می سازد.
GetStraeam() : این متد یک NetworkStream مورد استفاده بین Client و Server را باز می گرداند.
3- خصوصیات حفاظت شده :
Active :
نوع: bool
تعیین کننده وجود یا قطع یک ارتباط فعال با سرور است.
Client :
نوع : Socket
پورت استفاده شده توسط TCPClient را معین می کند. چون این خصوصیت Protected می باشد پورتمورد استفاده فقط وقتی قابل دسترسی است که شما یک کلاس دلخواه از TCPClient به ارث ببرید.
پایان قسمت اول