[size=xx-large]
WinSock کنترل
مقدمه :
نسبت به تمام کنترلهاي اینترنت در سطح پایینتري WinSock کنترل
قرار دارد . این کنترل امکان ایجاد سرویسهاي شبکه اي مبتنی بر
را مهیا می کند . بعبارت دیگر توسط این UDP و TCP پروتکلهاي
سرویس گیرنده ) Client/Server کنترل می توان برنامه هاي کاربردي
بین UDP و یا TCP / سرویس دهنده ) ایجاد و با استفاده از پروتکل
آنها ارتباط برقرار نمود .
با تنظیم خصوصیات و فراخوانی متدهاي این کنترل می توانید به
راحتی به یک کامپیوتر راه دور متصل شوید و داده ها را در هر دو جهت
جابجا نمائید . نمونه کاربرهایی که می توان با این کنترل ایجاد نمود :
Proxy Server ،Mail server ،Mail client ، Client-server chat
پیاده سازي الگوریتم هاي ، Port Scanner ،Network Game ،
موازي و …
: TCP مبانی
اجازه می ( Transfer Control Protocol ) پروتکل کنترل اینترنت
به یک ( socket ) را از طریق سوکت ( Connection ) دهد یک اتصال
ساخته و استفاده کنید . با ( Remote Computer ) کامپیوتر راه دور
استفاده از این اتصال ، هر دو کامپیوتر می توانند داده ها را بین
همانند صحبت TCP خودشان انتقال دهند . برقراري ارتباط از طریق
کردن با تلفن است که باید حتماً اتصالی بین دو کامپیوتر صورت گیرد
تا بتوانند با هم ارتباط برقرار کنند .
IP می سازید بایستی بدانید که نام یا آدرس Client اگر یک برنامه
و همچنین از طریق چه ( Remote Host IP ) چیست Server کامپیوتر
حال بایستی . ( Port Remote ) پورتی می توانید به آن متصل شوید
کنید . Connect به آن پورت
١٥٢
می سازید بایستی پورتی را که روي آن Server همچنین اگر یک برنامه
و سپس به ( LocalPort ) به درخواستها گوش می دهید مشخص کنید
. ( Listen ) پورت گوش دهید
این Server تقاضاي یک اتصال را می دهد Client زمانیکه یک کامپیوتر
می کند . Accept درخواست را
زمانیکه یک اتصال ساخته می شود ، هر دو کامپیوتر می توانند داده را
فرستاده و دریافت کنند .
!Error
: UDP مبانی
پروتکلی بدون ( User Datagram Protocol ) پروتکل دیتاگرام کاربر
کامپیوترها نیاز به ، TCP است . برخلاف ( Connectionless ) اتصال
و client برپا کردن یک اتصال ندارند بنابراین یک برنامه می تواند یک
شبیه ارسال نامه از UDP باشد . برقراري ارتباط در server یا یک
طریق پست است .
Client کامپیوتر Local Port ابتدا باید UDP براي انتقال داده توسط
١٥٣
را برابر RemoteHost تنها بایستی Server تنظیم گردد . کامپیوتر
را همان Remote Port قرار دهد و همچنین Client آدرس کامپیوتر
قرار دهد . سپس دو کامپیوتر می توانند Client کامپیوتر Local Port
داده ها را بین خود جابجا کنند .
: WinSock استفاده از کنترل
اولین کاري WinSock 1 – انتخاب پروتکل: در زمان استفاده از کنترل
است . UDP یا TCP که باید انجام دهید انتخاب یکی از پروتکلهاي
طبیعت برنامه اي که شما می سازید نوع پروتکلی را که باید استفاده
کنید مشخص می کند . چند سوال زیر به شما کمک می کند که پروتکل
مورد نیازتان را انتخاب کنید :
- آیا برنامه شما در زمانیکه داده فرستاده می شود یا دریافت می شود
دارد ؟ اگر چنین است Client یا Server نیاز به اطلاعاتی از طرف
قبل از ارسال یا دریافت داده ایجاد شود . TCP بایستی یک اتصال
- آیا داده بسیار بزرگ است ( مثل تصویر یا فایلهاي صوتی ) ؟ زمانیکه
اتصال را باقی نگه می TCP ساخته می شود پروتکل TCP یک اتصال
دارد و درستی ارسال داده تضمین شده است . این اتصال در هر حال به
١٥٤
منابع محاسباتی بیشتري نیاز دارد و بنابراین پرهزینه تر است .
ارسال ( Session ) - آیا داده متناوب ارسال می شود یا در یک نشست
خواهد شد ؟ براي مثال اگر شما یک برنامه می سازید که کامپترهاي
مشخصی را در یک زمان خاص از انجام شدن عملیاتی مطلع می کند
همچنین براي ارسال UDP مناسب تر است . پروتکل UDP پروتکل
مقادیر کوچک داده اي مناست تر می باشد .
2 – تنظیم پروتکل : براي تنظیم پروتکلی که می خواهید در برنامه تان از
کنترل Protocol آن استفاده کنید در زمان طراحی برنامه خاصیت
قرار sckUDPProtocol و یا sckTCPProtocol را برابر WinSock
دهید . همچنین می توانید پروتکل خود را توسط کد زیر تنظیم کنید :
WinSock.Protocol=sckTCPProtocol
3 – مشخص کردن نام کامپیوتان : براي اتصال به کامپیوتر راه دور
و یا نام کامپوتر را بدانید . IP بایستی آدرس
موجود Control Panel/Network/Identification نام کامپیوتر در
خود را Server و Client است . در صورتیکه می خواهید دو برنامه
براي هر دو IP روي یک کامپیوتر تست کنید از آدرس 127.0.0.1
استفاده کنید اما اگر دو برنامه را روي دو کامپیوتر مجزا در شبکه قرار
می توانید آدرس DOS Prompt در ipconfig داده اید با اجراي دستور
کامپیوتر ها را بدست آورید . IP
TCP در زمان ساخت برنامه اي که از پروتکل : TCP 4 – ایجاد اتصال
است یا Client استفاده می کند ابتدا باید تصمیم بگیرید که این برنامه
بایستی روي یک پورت خاص Server براي ساخت یک برنامه . Server
تقاضاي یک اتصال را می دهد ، برنامه Client کنید . زمانیکه Listen
کند و بنابراین اتصال کامل شده است . Accept می تواند آنرا Server
١٥٥
می توانند با هم ارتباط داشته باشند . Server و Client حال
را نشان می دهد : TCP مراحل زیر ساخت یک سرور چت ساده بر مبناي
را انتخاب کنید و در لیست Components گزینه Project - از منوي
را انتخاب کنید . Microsoft WinSock ها مورد 6.0 Component
tcpserver در فرم خود قرار دهید و نام آنرا WinSock - یک کنترل
بگذارید
و نیز یک txtReceiveData و txtSendData با نامهاي textbox - دو
دکمه در فرم قرار دهید .
بنویسید : Form_Load - کد زیر را در رویداد
Tcpserver.LocalPort=1000
tcpserver.Listen
می آید رویداد Client - زمانیکه درخواستی از طرف
اجرا می شود . در این رویداد ابتدا باید چک کنید ConnectionRequest
که حالت کنترل بسته باشد . اگر چنین نیست اتصال را قبل از پذیرفتن
می requestID اتصال جدید ببندید . سپس تقاضا را بر اساس پارامتر
پذیریم :
Private Sub tcpserver_ConnectionRequest(ByVal
(requestID As Long
tcpserver.Close sckClosed Then <> If tcpserver.State
tcpserver.Accept requestID
End Sub
برقرار شده است . کد زیر را براي Server و Client - حال اتصال بین
بنویسید : Send مربوط به کلیک دکمه event
١٥٦
Tcpserver.SendData txtSendData.text
اجرا می شود DataArrival بیاید رویداد Client - اگر داده اي از طرف
. کد زیر را براي این رویداد بنویسید :
As Private Sub tcpserver_DataArrival(ByVal bytesTotal
(Long
Dim strData As String
strData tcpserver.GetData
txtReceiveData.Text = strData
End Sub
بنویسید : Form_Unload - کد زیر را براي رویداد
Tcpserver.Close
بصورت زیر است : TCP Client مراحل ساخت یک
بگذارید . tcpclient در فرم قرار دهید و نام آنرا WinSock - یک کنترل
و نیز یک دکمه با نام txtreceive و txtsend با نامهاي textbox - دو
در فرم قرار دهید . send
در فرم قرار دهید . connect - یک دکمه با نام
بنویسید : Form_Load - کد زیر را براي متد
tcpclient.RemoteHost=”yourservername”x
tcpclient.RemotePort=1000
بنویسید : connect - کد زیر را براي رویداد کلیک شدن دکمه
tcpclient.Connect
بنویسید : send - کد زیر را براي رویداد کلیک شدن دکمه
١٥٧
tctclient.SendData txtsend.Text
بنویسید : DataArrival - کد زیر را براي رویداد
As Private Sub tcpclient_DataArrival(ByVal bytesTotal
(Long
Dim strData As String
strData tcpclient.GetData
txtreceive.Text = strData
End Sub
بنویسید : Form_Unload - کد زیر را باري رویداد
Tcpclient.Close
ساده را نشان می دهد . فایل Client-Server کدهاي فوق یک سیستم
هر دو برنامه را بسازید و آنها را اجرا کنید تا بتوانید سیستم خود exe
را تست کنید .
اي که در بالا ساخته Server : 5 – پذیرفتن بیش از یک تقاضاي اتصال
شد تنها می تواند تقاضاي یک اتصال را بپذیرد . با استفاده از ایجاد یک
می توان چندین تقاضاي اتصال را پذیرفت . WinSock آرایه از کنترل
از کنترل بسازیم ( با تنظیم ( instance ) براي اینکار کافی است یک کپی
جدید بکار ببریم . instance را براي Accept و متد ( Index خاصیت
در فرم داریم که sckServer با نام WinSock فرض کنید یک کنترل
از intMax آنرا صفر قرار داده ایم . همچنین یک متغیر Index خاصیت
را نگه Server تعریف می کنیم که تعداد اتصالات همزمان به Long نوع
کد زیر را بنویسید : Form_Load مربوط به event می دارد . در
١٥٨
intMax=0
sckServer(0).LocalPort=1000
sckServer(0).Listen
هر بار که تقاضاي یک اتصال می رسد کد ابتدا تست می کند که مقدار
یکی intMax صفر باشد متغیر Index چقدر است . اگر مقدار Index
جدید از کنترل instance براي ساخت یک intMax افزایش می یابد و از
براي پذیرفتن تقاضاي اتصال instance استفاده می شود . حال از این
استفاده می گردد . براي اینکار کد زیر را براي رویداد
بنویسید : ConnectionRequest
Private Sub sckServer_ConnectionRequest(Index As
(Integer, ByVal requestID As Long
If Index = 0 Then
1 + intmax = intmax
Load sckServer(intmax)x
0 = sckServer(intmax).LocalPort
sckServer(Index).Accept requestID
End If
End Sub
ساده تر از برنامه هاي UDP ساخت یک برنامه : UDP 6 – ایجاد اتصال
TCP به اتصال نیاز ندارد . در برنامه UDP است زیرا پروتکل TCP
می کرد و یک کنترل Listen بایستی حتما WinSock بالا یک کنترل
ایجاد نمود . در عوض پروتکل Connect دیگر یک اتصال را توسط متد
نیازي به اتصال ندارد . براي ارسال داده بین دو کنترل UDP
سه مرحله بایستی انجام شود : WinSock
برابر نام کامپیوتر مقابل است . RemoteHost - پارامتر
کامپیوتر مقابل LocalPort برابر پارامتر RemotePort - پارامتر
١٥٩
LocalPort براي مشخص کردن Bind - استفاده از متد
چون هر دو کامپیوتر از نظر ارتباط مساوي هستند ، این نوع برنامه ها
گویند . براي نمونه از کد زیر براي ساخت یک برنامه Peer-to-Peer را
استفاده می کنیم : chat
بگذارید udppeerA در فرم قرار دهید و نام آنرا WinSock - یک کنترل
.
قرار دهید . UDPProtocol آنرا Protocol - خاصیت
و نیز یک دکمه در فرم txtreceive و txtsend با نامهاي textbox - دو
قرار دهید .
بنویسید : Form_Load - کد زیر را براي متد
udppeerA.RemoteHost=”nameofpeerB”x
udppeerA.RemotePort=1001
1002 udppeerA.Bind
مربوط به کلیک دکمه بنویسید : event - کد زیر را براي
udppeerA.SendData txtsend.text
بنویسید : DataArrival - کد زیر را براي رویداد
Dim strData as String
strData udppeerA.GetData
txtreceive.Text=strData
مشابه مراحل بالا عمل کنید فقط خاصیت UDP peerB براي ساخت
آنرا RemotePort و خاصیت PeerA آنرا نام کامپیوتر RemoteHost
آنرا 1001 قرار دهید . Bind 1002 و خاصیت
[/size]