Socket - Socket Programming چیست ؟
در ارتباطات شبکه قراردادهایی استفاده می شود تحت عنوان Protocol ,
پروتکولهای مختلفی ایجاد شده اما در ارتباطات اینترنتی و شبکه هایی که ارتباط ۲ طرفه است
بیشتر از نوع( TCP/IP ) استفاده میشه که اساس اون به صورت خیلی مختصر اینه که برای هر
کامپیوتر که به شبکه (که اینترنت هم یه شبکه هستش !!) وصله یه IP مخصوص به خودش رو داره و به نوعی آدرس اون کامپیوتر محسوب میشه که تمام خصوصیات یه آدرس رو که میشه متصور شد داراست .
اما چرا گفتم در شبکه هایی که ارتباط ۲ طرفه نیازه از ( TCP/IP ) استفاده میشه ؟
چون انواع دیگری هم از جمله UDP هستند که تقریبا ارتباط یکطرفه میباشد مثلا برای پخش برنامه های رادیویی .
-----------------------------------------------------------------------------------
اصلی ترین عامل در یک ارتباط شبکه ای Socket میباشد که اعمال شبکه را بصورت خواندن و
نوشتن در یک فایل شبیه سازی نموده است . سوکت در اصل مانند یک کانال ارتباطی است
که میان دو نقطه ایجاد شده و پیغامها رد و بدل میشود.
برای داشتن یک ارتباط شبکه ای باید یک سوکت ایجاد کنیم ( منظور نرم افزاری هستشا !! )
که لازمه این کار اینه که بدانیم برای گوش دادن داریم ایجاد میکنیم یا برای فرستادن پیام .
اگه برای فرستادن پیام باشه که پر واضحه که نیاز به آدرس مقصد داریم . اما این کافی نیست !!!
امروزه پارتمان نشینی رونق گرفته و تو کامپیوتر هم نفوذ کرده !!!!
برای فرستادن نامه امروزه تنها آدرس ساختمون طرف کافی نیست و نیاز به شماره واحد اون هو هست .
این فقط یه تمثیل بود ! درسته تو کامپیوتر هم فقط IP کافی نیست و شماره واحد برنامه ای که گوش به زنگه هم نیازه که به اون Port میگن . یعنی شماره پورت هم نیازه .
اما یه چیز یادم رفت بگم که IP از ۴ عدد ۰تا۲۵۵ تشکیل شده که با نقطه از هم جدا میشن مثلا : ۱۶۸.۲۳.۵۶.۹۸ یه IP هستش . اما پورت اعدادی بین ۱ تا (بصورت رایج) ۶۵۰۰۰ را میتونه شامل بشه .(بله بزرگتر از این عدد هم میتونه شماره پورت بشه اما چه کاریه !!!)
اینجا ممکنه یه سوال پیش بیاد که مگه نه اینکه هر کامپیوتر فقط یه IP داره پس یعنی در یه لحظه آیا فقط به یه کامپیوتر میتونه وصل شه ؟؟
جواب منفی است
درسته که IP یکی بیشتر نیست اما تعداد معتنابهی پورت داریم
یعنی با هر پورت به یه کامپیوتر متصل میشیم و میتونیم تا ۶۵۰۰۰ (می دونم بیشتره ;-) ) ارتباط از صدقه سری پورتها داشته باشیم .
اما اگه سوکت برای گوش دادن باشه تنها کافیه که برای ایجاد سوکت بگیم با چه شماره پورتی می خوایم ایجادش کنیم .
-----------
اولین نکته ای که لازمه بگم اینه که تو استفاده از سوکت در اول ایجاد پروژه حتما باید چک باکس مربوط به WinSock رو تیک کنید.
در برنامه نویسی سوکت ۲ نوع ارتباط خواهیم داشت :
الف ) در هنگام دریافت یا ارسال پیغام تمام برنامه متوقف می شود که در بسیاری از موارد اصلا مطلوب نیست
ب) بر اساس Event پایه گذاری می شود که هر موقع پیغامی منتظر دریافت شدن بود آنرا دریافت کند و هر موقع پیغام آماده فرستادن بود آنرا بفرستد و کل برنامه از کار نیافتد که در اکثر موارد این روش استفاده می شود .
-----------------------------------------------
تمام نیازهای مارا یک کلاس به نام CAsyncSocket تامین می کند . که با ساختن شئ از آن می توانیم به امکاناتی نظیر send , Receive ,... دسترسی داشته باشیم که مفصلترش رو توضیح خواهم داد . که هرچی بعد از این از توابع اسم میبرم مربوط به این کلاس هستش
برای این نوع ارتباط که داریم بحث می کنیم ۲ جور سوکت باید بسازیم :
۱- برای فرستادن
۲- برای گوش دادن یا همون دریافت
برای ایجاد سوکت از متد;( ) Create استفاده میشه که ۲ نوع آن به این شکل است که :
۱
- برای نوع فرستادن تنها کافیست که این متد بدون پارامتر صدا زده شود : ;( ) Create
۲- برای نوع دریافت کردن ۱ پارامتر نیاز دارد و آن شماره پورت برای دریافت کردن میباشد که به طور مثال :;( ۱۷۵۳) Create
-----------------------------------------------
بعد از ایجاد سوکت کار بعدی وصل شدن به برنامه مقصد هستش که منتظر دریافت پیغام هستش .
این کار از جانب فرستنده پیغام شروع میشه که باید متد;( ) Connect صدا زده بشه .
این متد ۲ پارامتر نیاز دارد :
۱- IP کامپیوتر مقصد یا آدرس تحت وب آن مثلا :" www.taraf.com" ( اگر در یک شبکه محلی میخواید وصل بشید اسم کامپیوتر هم میتونه جای IP به کار بره ) که بصورت یه رشته خواهد بود
۲- شماره پورت کامپیوتر مقصد که گوش به زنگ هستش
مثلا : ;(۱۳۶۵,"192.۱68. 12 .39"

---------------------------------------------------
اما قبل وصل شدن نیازه که گوش به زنگ بشیم تا بتونیم درخواستهای اتصال رو جواب بدیم برای این کار از متد;( ) Listen بدون هیچ پارامتری استفاده میکنیم تا سوکت دریافت آماده بشه .
---------------------------------------------------
حالا که به اینجا رسیدیم وقتی تقاضای وصل شدن از سمت یه کامپیوتر دیگه به ما میرسه رو باید قبول کنیم :
گوش به زنگ هستیم که اگه تقاضایی رسید با متد ;( ) Accept قبولش کنیم
این متد یه پارامتر میگیره و اون یه شئ از کلاس CAsyncSocket هستش که وظیفه دریافت متن پیغامهای بعد از متصل شدن رو به عهده میگیره .
--------------------------------------------------
برای فرستادن پیغام از متد ;( ) Send استفاده میکنیم که ۲ پارامتر میگیرد :
۱- اشاره گر به بافر داده مورد نظر برای فرستادن است که با استفاده از تابع;(آ ) LPCTSTR استفاده میکنیم که یک پارامتر ورودی دارد و آن متغییری است که پیغام ما در آن است .
۲- طول بافر که همان طول پیغام می باشد
مثلا اگه پیغام در متغییری به نام str باشه به شکل زیر میفرستیم :
; (()str.GetLengthو(Send(LPCTSTR(str
-------------------------------------------------
وقتی پیغام به گوش دهنده برسه یه Eventبه نام;( ) OnReceive فعال میشه که با متد ;( )Receive پیغام را دریافت می کند که ۲ پارامتر می گیرد :
۱- اشاره گر به یک بافر که میتواند یک رشته کاراکتری باشد
۲- طول بافر مورد نظر که به چه طولی از پیغام را می خاهیم دریافت کنیم
بعد از اتمام کار با سوکت باید انرا ببندیم که این کار با متد ;( ) Close صورت میگیرد.
-------------------------------------------------------------------------------------------------------------------------------
منبع
http://pnu-club.com
با تتشکر از نویسنده متن
TAHA
دیدگاه