تبليغاتX
Iranian Technology
 
آموزش برنامه نویسی
 
 
آموزش ویژوال بیسیک و ... برای دیدن تمامی مطالب به آرشیو ماهانه مراجعه کنید
 
آموزش کنترل WinSock :
کنترل WinSock یکی از کنترل های شبکه است . کنترل های دیگری برای کار باشبکه و اینترنت وجود دارد که عبارنتد از Web Browser , Interner Transfer , HtmlObject , ...  . کنترل WinSock نسبت به کنترل های گفته شده در سطح پایین تری قرار دارد. میدانید که در شبکه قراردادهایی(Protocol) برای ارسال اطلاعات وجود دارد .کنترل WinSOck امکان ارتباط از طریق قرارداهای TCP و UDP را میدهد.

قرارداد TCP: در این قرارداد دو کامپیوتر میتوانند به هم متصل شوند و به تبادل اطلاعات بپردازند. در هر شبکه همیشه یک کامپیوتر سرویس دهنده(Server) و یک یا چندید کامپیوتر سرویس گیرنده (Clint) وجود دارد.اگر ما بخواهیم با کنترل WinSock برنامه ای بنویسیم که سرویس گیرنده (Clint) باشد باید IP (چهار شماره از ۰ تا ۲۵۵ که با نقطه از هم جدا میشوند و نقش یک آدرس را دارند مثل ۲۱۴.۲.۰.۱۳۸)سرویس دهنده (Server) را بدانیم به علاوه پورتی که سرویس دهنده همیشه به آن گوش میدهد(Listen)و از طریق آن پورت می توانیم به سرویس دهنده متصل شویم را باید بدانیم. این کارها مربوط به کامپیوتر Clint می شد اما در کامپیوتر Server نیز باید پورتی که قرار است به آن گوش داده شود مشخص شود .
در زیر با ساختن یک برنامه چت ساده به استفاده از قرارداد TCP در کنترل WinSock بیشتر آشنا خواهید شد.

ساخت برنامه چت: برای ساخت برنامه چت و تست کردن آن باید یک برنامه Clint و یک برنامه Server بسازیم.

برنامه Clint (سرویس گیرنده):
برای ساخت برنامه سرویس گیرنده ابتدا یک پروژه جدید از نوی Standard EXE باز کنید.دو TextBox بر روی فرم خود قرار دهید  و به سلیقه خودتون اندازه اونها رو تنظیم کنید.دو عدد Command Button بر روی فرم قرار دهید.
حالا با فشردن کلیدهای Ctrl+T پنجره ی Components را باز کنید و در سربرگ Controls به دنبال Microsoft Winsock Control 6.0 بگردین و تیک کنار اون رو بزنید و بعد هم OK کنید.با این کارها کنترل Winsock به جعبه ابزار ویژوال بیسیک اضافه می شود. در جعبه ابزار روی کنترل Winsock دو بار کلیک کنید تا یک کنترل Winsock به فرم اضافه شود.
خواص کنترل ها رو مثل جدول زیر تغییر بدید.

نام کنترل خاصیت کنترل مقدار خاصیت
Text1 Text Recived:
Text2 Text Message
Command1 Caption Send Message
Command2 Caption Connect

قبل از اینکه شروع به کدنویسی کنیم باید بگم که کنترل Text1 رو در بالای فرمتون قرار بدید چون که پیام هایی که قرار است به وسیله این برنامه دریافت شود در  Text1 نمایش داده میشود.همچنین Text2 و Command2 را در کنار هم بگزارید چون با کلیک شدن Command1  اطلاعات موجود در Text2 به کامپیوتر مقابل فرستاده میشود.Command2 نیر کار برقراری ارتباط و متصل شدن به کامپیوتر مقابل را انجام میدهد.

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

روی Command2 دوبار کلیلک کنید تا پنجره کدها باز شود و سپس کدهای زیر رو بنویسید:

Private sub Command2_Click

winsock1.Close
winsock1.Connect  "127.0.0.1" , 5000

End Sub

در داخل رویداد کلیک دکمه Command2 دو خط کد نوشتیم که خط اول باعث می شود که اتصال کنترل WinSock قطع شود . در خط دوم هم گفتیم که Winsock به آدرس ۱۲۷.۰.۰.۱ متصل شود و از طریق پورت ۵۰۰۰ به این آدرس یا IP متصل شود.(توجه داشته باشید که IP ی ۱۲۷.۰.۰.۱ آدرس کامپیوتر خود شماست و برای متصل شدن به یک کامپیوتر دیگر باید IP آن کامپیوتر را بدانید.)

حالا روی Command1 دوبارکلیک کنید تا پنجره کدها باز شود و سپس کد زیر را به آن اضافه کنید:

Private Sub Command1_Click

winsock1.SendData  Text2.Text

End Sub

در قطعه کد بالا متد SendData باعث می شود که داده های موجود در Text2 به کامپیوتر مقابل فرستاده شود.

حالا باید اطلاعاتی که از طرف مقابل دریافت می شود را نمایش بدهیم.برای این کار روی کنترل Winsock دابل کلیک کنید تا پنجره کدها باز بشه. در بالای پنجره کدها رویداد DataArrival رو انتخاب کنید و بعد هم کدهای زیر رو اضافه کنید:

Private Sub Winsock1_DataArrival(ByVal BytesTotal as Long)     'x

Dim StrTemp As String
Winsock1.GetData  StrTemp
Text1.Text = StrTemp

End Sub

در قطعه کد بالا رویداد DataArrival زمانی رخ می دهد که اطلاعاتی از طرف کامپیوتر مقابل فرستاده شود که ما در بالا یک متغیر تعریف کردیم و سپس به وسیله ی متد GetData اطلاعاتی که از طرف کامپیوتر مقابل فرستاده شد را در این متغییر ذخیره کردیم.

کار ساختن برنامه ی Clint تمام شد. و اما برنامه Server :
برای ساختن برنامه Server ابتدا یک پروژه جدید ویژوال بیسیک از نوع Standard EXE باز کنید سپس دو عدد TextBox و یک عدد Command Button روی فرم قرار بدهید. بعد هم مثل برنامه Clint کنترل Winsock را از پنجره Components (با فشردن کلیدهای Ctrl+T)به جعبه ابزار اضافه کنید و یک عدد کنترل Winsock به فرمتون اضافه کنید و بعد هم خواص کنترل ها رو مثل زیر تغییر بدهید:

نام کنترل خاصیت مقدار خاصیت
Text1 Text Recived:
Text2 Text Message:
Command1 Caption Send Message
winsock1 Protocol sckTCPProtocol-0

روی فرم برنامه دوبار کلیک کنید تا رویداد بارگذاری فرم در پنجره کدها باز شود.سپس کدهای زیر رو به رویداد Form_Load اضافه کنید:

Private Sub Form_Load

Winsock1.LocalPort = 5000
Winsock1.Listen

End Sub

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

حالا روی Command1 دوبارکلیک کنید تا پنجره کدها باز شود و کدهای زیر را به پنجره کدها اضافه کنید:

Private  Sub Command1_Click

Winsock1.SendData  Text2.Text

End Sub

با جفت کلیک کردن روی کنتل Winsock پنجره کدها را باز کنید و در قسمت بالای پنجره کدها لیست بارشو رویدادها را بازکرده رویداد ConnectioRequest مربوط به کنترل Winsock رو کلیک کنید و کدهای زیر رو اضافه کنید:

Private Sub Winsock1_ConnectioRequest(ByVal requestID As Long)    'x

If  Winsock1.State <> sckClosed Then WinSock1.Close
Winsock1.Accept  requestID
MsgBox  "A Request  Recived" , vbokonly + vbInformation

End Sub

در بالا در خط اول با یک شرط گفتیم که اگر کنترل Winsock دارای یک ارتباط با جای دیگری بود ارتباط قطع شود. سپس در خط دوم درخواست(Request) دریافت شده را قبول میکنیم.

سپس رویداد DataArrival مربوط به کنترل Winsock را در لیست بازشوی رویدادها کلیک کنید. حال کدهای زیر رو به برنامتون اضافه کنید:

Private Sub Winsock1_DataArrival(ByVal  bytesTotal As Long)  'x

Dim StrTemp  As String
Winsock1.GetData  StrTemp
Text1.Text = StrTemp

End Sub

خوب دیگه کار ما تموم شد و نوبت به تست برنامه میرسه: برای این کار هر دوتا برنامتون رو اجرا کنید و دکمه Connect مربوط به برنامه Clint رو بزنید اگر مشکلی پیش نیومده باشه در برنامه Server یک پیام مبتنی بر "یک درخواست دریافت شد" به نمایش در می آید.

*********************************************************************

UDP:استفاده از قرارداد UDP بسیار ساده تر از TCP است چرا که در این قرار داد نیازی به اتصال (Connect) نیست.در ارتباط UDP هر دو کامپیوتر Clint , Server هستند و هر دو کامپیوتر از نظر اتصال مساوی هستند.قرارداد UDP همانند شبکه های نظیر به نظیر است.

ساخت یک برنامه چت با استفاده از قرار داد UDP:

ساختن برنامه ی اول:
ابتدا یک پروژه جدید از نوع Standard EXE باز کنید سپس دو عدد TextBox و یک عدد Command Button و همچنین یک عدد کنترل Winsock به فرم برنامه اضافه کنید:

نام کنترل خاصیت مقدار خاصیت
Command1 Caption Send Message
Text1 Text Recived:
Text2 Text Message
Winsock1 Protocol sckUDPProtocol - 1

روی فرم برنامه جفت کلیک کنید تا روال رویداد Form_Load باز شود.سپس کدهای زیر رو به برنامه اضافه کنید:

Private Sub Form_Load

Winsock1.RemoteHost = "YourHostName"    'x
Winsock1.RemotePort = 5000
Winsock1.Bind  5001

End Sub

به جای "YourHostName" باید نام کامل کامپیوترتان را بنویسید.برای به دست آوردن نام کامل کامپیوتر کلیدهای PauseBreak + پنجره   را بزنید یا از منوی استارت روی آیکون My Computer کلیک راست کنید و Propertis را انتخاب کنید که در سربرگ Computer Name در جلوی Full Computer Name نام کامل کامپیوتر شما نوشته شده است.

روی Command1 جفت کلیک کنید تا  پنجره کدها باز شود و کدهای زیر رو بنویسید:

Private Sub Command1_Click

Winsock1.SendData  Text2.Text

End Sub

حالا هم روی کنترل Winsock دابل کلیک کنید و رویداد DataArrival مربوط به آن را انتخاب کنید:

Private Sub Winsock1_DataArrival(ByVal  BytesTotal As Long)    'x

Dim StrTemp As String
Winsock1.GetData  StrTemp
Text1.Text = StrTemp

End Sub

کار برنامه اول تموم شد به همین سادگی.
برای ساختن برنامه دوم همین کارها رو دوباره انجام بدید فقط در Form_Load برنامه دوم  رو به این صورت تغییر بدهید:

Private Sub Form_Load

Winsock1.RemoteHost = "YourHostName"    'x
Winsock1.LocalPort = 5001
Winsock1.Bind  5000

End Sub

توجه : از قرارداد TCP در مواقعی استفاده کنید که حجم داده های مورد تبادل زیاد باشد و بخواهید مطمئن شوید که داده ها صحیح و سالم به مقصد فرستاده شده اند.

توجه : از جمله مشکلات و خطاهایی که ممکن است در این نوع برنامه نویسی رخ دهد درست ست نکردن قرارداد یا پروتکل است پس Protocol را درست انتخاب کنید.

توجه: نظر هم یادتون نره!

*********************************************************************

چندتا کار کاربردی:

۱ - اجرای دستورات موجود در یک TextBox: از منوی Project گزینه ی References را انتخاب کنید و به دنبال Microsoft Script Control 1.0 بگردید و تیک کنار اون رو بزنید و بعد هم OK. حالا یک عدد TextBox و یک عدد CommandButton به فرم برنامتون اضافه کنید. روی Command1 دوبار کلیک کنید سپس کدهای زیر رو بنویسید:

Private Sub Command1_Click

Dim S As ScriptControl
Set  S = New  ScriptControl
S.Language = "VBScript"  'x
S.ExecuteStatement  Text1.Text

Set S = Nothing

End Sub

برای استفاده از برنامه ای که نوشتید برنامه رو اجرا کنید و در TextBox بنویسید MsgBox "Hello" , 16 و بعد هم Command1 را کلیک کنید و با دیدن نتیجه حال کنید.

۲ - گرد کردن لبه های فرم:
یک پروژه جدید از نوع Standard EXE باز کنید. از منوی View گزینه Code را بزنید تا پنجره کدها باز شود. کدهای زیر رو به پنجره کدها اضافه کنید:

Private Declare Function SetWindowRgn lib "User32.dll"(ByVal hWnd as Long,ByVal _
hRgn As Long , ByVal bRedraw As Boolean)As long

Private Declare Function CreateRoundRectRgn Lib "gdi32.dll"(ByVal X1 As Long , ByVal_
Y1 As Long,ByVal X2 as Long , ByVal Y2 As Long , ByVal_
X3 as Long , ByVal  Y3  as Long)as long

Private Form_Load()  'x

Dim Temp  as Long
ScaleMode = 3
Temp = CreateRoundRectRgn(0,0,ScaleWidth , ScaleHeight , 30, 30)   'x
SetWindowRgn Me.hWnd , Temp , True

End Sub

*********************************************************************

با نظر دادن باعث ارتقای سطح این وبلاگ شوید.!!!!!
فعلآ.

 |+| نوشته شده در  چهارشنبه بیست و ششم دی 1386ساعت 21:25  توسط علی  | 
 
  بالا  

Free Counter