|
آموزش برنامه نویسی
|
||
|
آموزش ویژوال بیسیک و ... برای دیدن تمامی مطالب به آرشیو ماهانه مراجعه کنید |
قرارداد 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
*********************************************************************
با نظر دادن باعث ارتقای سطح این وبلاگ شوید.!!!!!![]()
فعلآ.![]()
|
|