در این جلسه با ساختار و مراحل ایجاد یک برنامه اتصال گرا (TCP) با استفاده از سوکت در سی شارپ آشنا می شوید. و نمونه برنامه های قابل اجرا را خواهید دید.

قبل از اینکه بتوان یک برنامه اتصال گرا با استفاده از سوکت نوشت، نیاز هست که با متدهای زیر آشنا شویم.

الف) استفاده از متد Bind

از متد Bind برای مقید کردن سوکت به یک آدرس در شبکه استفاده می شود و روش اجرای آن بصورت زیر است :

Bind(EndPoint  address );

ب) متد Listen

پس از اینکه سوکت به یک آدرس محلی مقید شد. با استفاده از متد Listen به خط گوش میدهیم تا یک کلاینت سعی به برقراری ارتباط نماید.

Listen( int backlog);

backlog یک عدد صحیح است تعداد ارتباطاتی که در صف انتظار برای یک سرویس هستند را تعیین می کند.

ج) متد Accept

بعد از listen، سرور آماده دریافت یک تقاضای ارتباط از Client میباشد. این کار توسط متد Accept انجام میگردد. این متد حاوی اطلاعاتی درباره یک سوکت جدید است و اینکه همه اتصال ها برای ارتباط با آن باید آن را فراخوانی کنند.

د) متدهای Send و Receive

بعد از اینکه Client تقاضای یک ارتباط را داد، Client و Server میتوانند شروع به انتقال اطلاعات نمایند. متدهای Receiveو Send برای ارسال و دریافت اطلاعات استفاده میشوند.

ه) متد Close :

پس از پایان یافتن ارتباط، سوکت باید Close شود.

مراحل اجرای متدهای سوکت

مراحل ایجاد یک برنامه سمت سرور بصورت اتصال گرا (TCP) با استفاده از سوکت  بصورت زیر است:

  1.  ايجاد سوکت با استفاده از کلاس Socket
  2.  مقيد کردن(تخصيص)سوکت به يک کارت شبکه (آدرسIP معين) با استفاده از متد Bind
  3.  گوش دادن به درخواست ها با استفاده از متد Listen
  4.  پذيرش درخواست ها براي برقراري اتصال با استفاده از متد Accept
  5.  مبادله داده ها با استفاده از متدهای Send و  Recieve
  6.  پايان دادن به ارتباط و بستن سوکتبا استفاده از متد Close

 

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

برنامه سمت سرور بصورت زیر است:

کدنویسان - برنامه نویسی سوکت - سرور

 

برنامه سمت کلاینت بصورت زیر است:

 

کدنویسان - برنامه نویسی سوکت - برنامه کلاینت

دقت کنید که در ارتباطات شبکه ای همیشه اطلاعات بصورت آرایه ای از بایت ها ارسال شده و نیز بصورت آرایه ای از بایت ها از شبکه دریافت می شوند. برنامه نویسی باید قبل از ارسال داده های متنی یا عددی آنها را به آرایه از نوع بایت تبدیل کند و هنگام دریافت نیز آنها از آرایه از بایت ها برداشته و به شکل دلخواه خودش تبدیل نماید.

در این مثال برای این تبدیل ها از کلاس ASCII از فضای نامی ASCIIEncoding استفاده شده است. متد GetString ، آرایه بایت را گرفته و به رشته تبدیل می کند و متد Getbytes رشته را گرفته و به آرایه ای از نوع بایت تبدیل می کند.