موقعیت شما:
صفحه اصلی » برنامه نویسی » برنامه نویسی سوکت در #C

تبلیغات ویژه

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

به بیان ساده می توان گفت که سوکت به ترکیب یک آدرس ماشین ( IP ) و یک شماره درگاه ( Port ) گفته می شود. این دو با هم و بصورت مکمل هم در آدرس یابی تحت شبکه به برنامه های کاربردی کمک می کنند که هر برنامه تنها packet ارسالی خود را و تنها از آدرس مورد نظرش بدست آورد یا به عبارت دیگر علاوه به بحث رساندن بسته به کامپیوتر مقصد رساندن آن به برنامه کاربدی مربوطه نیز لازم است.

در مدل کلاینت – سرور ، مبادلات زیر بین کلاینت و سرور رخ می دهد:

  •  سرور سوکتی را تعریف میکند
  • سرور سوکت را به یک IP که همان IP خودش است و یک پورت Bind میکند یا اختصاص میدهد
  • سرور به پورت گوش میدهد
  • کلاینت سوکتی را تعریف میکند و IP و پورت سرور را به آن اختصاص میدهد
  • کلاینت درخواست اتصال یا کانکت شدن به سرور را میدهد
  • سرور درخواست کلاینت را دریافت و آن را می پذیرد
  • کلاینت اطلاعاتی را ارسال می کند
  • سرور اطلاعات را می گیرد
  • سرور اطلاعات را ارسال میکند و کلاینت آن را میگیرد
  • سرور بسته میشود ۱۱- کلانیت بسته میشود

برنامه سمت سرور

ابتدا برنامه سمت سرور را می نویسم. در این برنامه می بایست یک پورت را باز کرده و به آن گوش دهیم  و دریافتی را نمایش دهیم.

ابتدا می بایست فضای نامهای زیر را با استقاده از using  به کامپایلر سی شارپ معرفی کنیم:


sok

اکنون متغیری به نام  را به صورت سراسری و static  تعریف می کنیم (از آنجایی که متد Mainیک متد static  است کلیه متغیرها و توابع مورد استفاده در آن نیز باید static باشند.)

 

 تعریف متغیرها و متدهای Static

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

یک شیء از کلاس سوکت به صورت سراسری و static ایجاد می کنیم :

sok1

به معنای این است که از شبکه ای استفاده می کنیم که دارای IP نسخه ۴ است.

SocketType.Stream برای سوکت هایی است که می خواهند به صورت Stream  داده ها را تبادل کنند.

ProtocolType.Tcp که نوع پروتکل ما را مشخص می کند.

اکنون می باید آدرس IP  و یک Port به سوکت مان اختصاص دهیم:

sok2

از آنجایی که این برنامه در سمت سرور اجرا میشود آدرس IP خاصی به آن نمیدهیم و پورت ۱۸۰۰ را باز می کنیم. کلاس IPEndPoint برای مشخص نمودن یک نود یا یک کامپیوتر در شبکه به کار میرود.

متد Bind  نود مشخص شده را به سوکت اختصاص می دهد.

اکنون زمان گوش دادن به پورت است:

sok3

عدد ۱۰۰ نشانه آن است که حداکثر ۴ connection میتوانند در صف قرار گیرند.

اگر در این لحضه در command prompt دستور netstat –an را تایپ کنید میتوانید ببینید که پورت ۱۸۰۰ باز شده و در حال گوش دادن است.

حال میباید تقاضای کانکت شدن کلاینت را بپذیریم:

sok4

حال برای گرفتن داده ها، می بایست یک بافرتعریف نماییم.

نکته: در سوکت پروگرمینگ، داده ها به صورت آرایه ای از بایت ها منتقل می شوند. برای ارسال رشته های یونیکد و …. بایست آنها را کد گذاری کنیم. برای کد گذاری و کد گشایی از کلاس System.Text  و متدهای آن استفاده کنیم. مثلا دستور زیر رشته salam را با فرمت Ascii به آرایه ای از بایت ها تبدیل می کند.

sok8

و متد زیر آن را رمزگشایی می کند:

sok6

ما عمل رمزنگاری را موقع ارسال داده ها و عمل رمز گشایی را موقع دریافت آنها انجام میدهیم.

اکنون میخواهیم داده ها را دریافت کرده و رمز گشایی کنیم:sok7

حال می توانیم داده ها را پردازش کنیم.

سورس کامل برنامه سمت سرور

sok9کدهایی که تا به اینجا دیدیم برای ایجاد سوکت های همگام یا سنکرون بوده است. این سوکت ها در برنامه های ویندوز و کلا سیستم های مالتی تسک کاربردی ندارند. چرا که بالفرض در زمانی از متد accept استفاده نموده ایم، در این حالت برنامه تا رسیدن یک سوکت به آن قفل شده و قادر به انجام کاری نیست.

برنامه سمت کلاینت

ایتدا یک سوکت تعریف می کنیم.

sok10

 

حال سرور را به آن معرفی می نماییم  و به آن کانکت می شویم:

sok12

اگر دوباره دستور netstat –an را در Command prompt  تایپ کنیم می بینیم که ارتباظ برقرار شده است. به شماره پورتها در آن دقت کنید.

اکنون داده های ارسالی را آماده می کنیم:

sok13

 

داده ها را ارسال می کنیم:

sok14

و سوکت را میبندیم :

sok15

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

sok16

برچسب ها:
اشتراک گذاری:
بیوگرافی نویسنده BloodCyb :

سلام امیر حامدی هستم نزدیک 6 ساله تو حوزه وب و امنیت فعالیت دارم با زبان های برنامه نویسی php و c و جاوا آشنایی دارم تو حوزه امنیت اطلاعات با انواع سیستم عامل ها کار کردم به خصوص کالی لینوکس و بک ترک هم اکنون مدیر سرور شرکت ارست هاست هستم.

نظرات:

دیدگاهتان را بنویسید