ایجاد ارتباط TCP میان سرویس دهنده و سرویس گیرنده توسط #C

سامان

پروتکل Transmission Control Protocol) TCP) یک پروتکل جریان گرا، ارتباط گرا، قابل اعتماد و نظیر به نظیر می باشد. ارتباط TPC همانند ارتباط تلفنی می باشد. به عنوان مثال شما (سرویس گیرنده) به منزل دوست خود (سرویس دهنده) زنگ می زنید. در صورتیکه دوست شما در منزل باشد تلفن را برداشته و با یکدیگر شروع به صحبت می کنید (نظیر به نظیر، جریان گرا، قابل اعتماد) و در انتها شما و دوستتان گوشی تلفن را قطع کرده (ارتباط گرا) و به ارتباط خود خاتمه می دهید. به عنوان مثال پروتکل HTTP از TCP استفاده می کند.TCP از IP به عنوان پروتکل شبکه استفاده می کند. IP یک پروتکل datagram (بسته های داده) گرا و Best-Effort (بسته های داده بصورتی فرستاده می شود که تحویل و صحت آن تضمین نمی گردد) می باشد.

در این مقاله یک مثال کوچک و ساده در مورد چگونگی برقراری ارتباط بین سرویس دهنده و سرویس گیرنده مورد بررسی قرار می گیرد. این مثال از دو بخش تشکیل شده است. بخش سرویس دهنده و بخش سرویس گیرنده.

کلاسهای مورد نیاز

در این مثال تنها دو کلاس اصلی بکار برده شده است. در سمت سرویس گیرنده، از کلاس System.Net.Sockets.TcpClient و در سمت سرویس دهنده از کلاس System.Net.Sockets.TcpListener استفاده می گردد. بطور کلی در سمت سرویس گیرنده یک TcpClient به سرویس دهنده متصل می شود. سپس با یک کانالی (جریان) که به سرویس دهنده اختصاص داده شده است اعمال مربوطه انجام می پذیرد.

سمت سرویس دهنده شامل مراحلی بیشتری می باشد، اما صورت کلی کد به همان صورت کد سرویس گیرنده شبیه می باشد. ابتدا باید یک درگاه محلی را به TcpListener اختصاص داد. در صورتیکه سرویس گیرنده به سرویس دهنده متصل شود به شما یک socket برگردانده می شود. با استفاده از این socket شما می تواند یک کانال ارتباطی (جریان) ایجاد نمایید.

قالب دستورات

در این مثال دستورات با استفاده از (دستورات با Enter از هم جدا می شوند) از یکدیگر تمیز داده می شوند. در صورتیکه سرویس گیرنده دستور “GET” را اجرا نماید پیغام “Hello World” برای او ارسال شده و در صورت ارسال دستور “EXIT” عبارت “BYE” برای سرویس گیرنده فرستاده شده و ارتباط قطع می گردد.

سرویس دهنده

در دنیای واقعی سرویس دهنده از دو قسمت اصلی تشکیل می شود. قسمت Functional Layer و دیگری Commad Processor. قسمت پردازشگر دستورات واسطی بین لایه ارتباطی و Functional Layer می باشد. لایه ارتباطی درخواست خود را به لایه پردازشگر دستورات ارسال می کند این لایه درخواست را به لایه Functional ارسال کرده و پس از دریافت جواب از لایه Functional آنرا به لایه ارتباطی می فرستد. سرویس دهنده ها معمولا به صورت سرویس های سیستم عامل اجرا می شوند. در این مثال سرویس دهنده ما تنها یک لایه داشته و به عنوان یک برنامه کنسول اجرا می گردد.

listener برروی پورت ۸۰۸۰ آماده دریافت درخواست سرویس گیرنده ها می باشد. متد AcceptSocket در زمان اتصال سرویس گیرنده یک socket را برمی گرداند. این متد برنامه را تا زمان دریافت درخواست معلق می کند. در صورت نیاز می توان از یک نخ برای این منظور استفاده نمود. در ادامه کانال ارتباطی لازمه برقرار می گردد و از کلاس StreamReader بمنظور دریافت داده ها از این کانال استفاده می شود. در این قسمت فرمانهای صادر شده از سوی سرویس دهنده باید بررسی و پاسخ مورد نظر به آن داده شود.

در صورتیکه دستور GET در یافت شود سرویس دهنده پیغام Hello World را صادر کرده و ادامه دستورات پردازش می گردد. در صورت صدور دستور ناشناخته نیز پردازش دستورات ادامه می یابد. در صورت دریافت دستور EXIT پردازش دستورات خاتمه یافته و در ادامه ارتباط با سرویس گیرنده قطع می شود.

سرویس گیرنده

سرویس گیرنده تا حدودی از سرویس دهنده پیچیده تر می باشد. سرویس گیرنده شامل دو قسمت می باشد: واسط کاربر (که یک برنامه کنسول ساده است) و پردازشگر دستورات که شامل عناصر ارتباطی می باشد. در ابتدا پردازشگر دستورات مورد بررسی قرار می گیرد. برای اینکار ابتدا یک interface ایجاد می کنیم. استفاده از interface قابلیت انعطاف پذیری بیشتری در مورد استفاده از پروتکل های دیگر به شما می دهد. در این حالت سرویس گیرنده تنها اشیاعی را می پذیرد که واسط مورد نظر را پیاده سازی کرده باشند. این عمل باعث استقلال سرویس گیرنده از پروتکل ارتباطی می گردد.

در ادامه یک کلاس با نام TCPClientCommandProcessor ایجاد می گردد. این کلاس واسط CommadProcessor را پیاده سازی می نماید. این کلاس شامل ۳ متد و یک سازنده می باشد. متد Connect وظیفه اتصال بر سرویس دهنده را برعهده دارد. بوسیله متد DisConnect ارتباط با سرویس دهنده قطع گشته و با متد Execute فرمانهای مورد نظر به سرویس دهنده ارسال می گردد.

واسط کاربر سرویس گیرنده

واسط کاربر سرویس گیرنده یک برنامه کنسول ساده می باشد. در این برنامه یک شئ از کلاس TCPClientCommandProcessor ایجاد شده و اعمال مربوطه انجام می گردد.

برگرفته ار کتاب C#.NET Web Developer’s Guide انتشارات SYNGRESS

1
اشتراک گذاری
سامان
سامان

فارغ التحصیل کارشناسی نرم افزار، علاقه مند به برنامه نویسی، طراحی وب، تکنولوژی های نوین، یادگیری و فیلم

پاسخ دهید