دانلود با لینک مستقیم و پر سرعت .
کار با کنترل winsock
کنترل winsock به شما اجازه می دهد به یک ماشین راه دور متصل شده و داده ها را با استفاده از پروتکل TCP و UDP مبادله کنید. هر دو پروتکل می توانند برای برنامه های client و server استفاده شوند.
موارد استفاده :
ساختن یک برنامه client که اطلاعات کاربر را قبل از فرستادن به سمت server جمع آوری می کند.
ساختن بک برنامه server که به عنوان بک نقطه مرکزی مجموعه برای داده های چندین کاربر می باشد.
ساخت یک برنامه chat
و موارد دیگر ...
Socket :
عاملی است برای برنامه نویسی تحت اینترنت که از طریق آن دو برنامه ، دو پروسه در شبکه مشخص می شوند .بنابراین اطلاعات ارسال شده یا دریافت شده از طریق این شماره منحصر به فرد یا عامل منحصر به فرد مسیر خود را پیدا می کند.
انتخاب یک پروتکل :
وقتی از کنترل winsock استفاده می کنید باید به این مسئله رسیدگی کنید که کدامیک از پروتکل های TCP و UDP را می خواهید استفاده کنید . تفاوت اصلی بین این دو در حالت اتصال آنها می باشد :
پروتکل TCP یک پروتکل اتصال – پایه است و مانند تلفن کاربر باید قبل از اقدام به ارسال اطلاعات یک ارتباط ایجاد کند.
پروتکل UDP یک پروتکل بدون اتصال است و مبادله اطلاعات بین دو کامپیوتر مانند ارسال پیغام است : یک پیغام از یک کامپیوتر برای یکی دیگر ارسال می شود اما ارتباط بین آن دو واضح نیست . حداکثر اندازه داده ارسال شده به صورت منحصر به فرد ، بوسیله شبکه تعیین می شود .
ساخت یک client :
وظیفه برنامه client side application : فرایند یا برنامه ای که در سمت مشتری برای استفاده از یک سرویس وب اجرا می شود .
عملیاتی که توسط client side application انجام می شود:
در خواست اتصال به برنامه server (عمل connect )
عمل ارسال اطلاعات به سمت server
دریافت اطلاعات از server
1- برای شروع سا خت برنامه client ابتدا ویژوال بیسیک را باز کرده و یک پروژه استاندارد را انتخاب و سپس آنرا باز می کنیم
2- سپس در قسمت ابزار راست کلیک کرده و گزینه components... را انتخاب می کنیم .
3- از صفحه ای که باز می شود گزینه Microsoft WinSock Control 6 را انتخاب می کنیم
4- بعد از زدن دکمه ok دو کامپیوتر کوچک پشت سرهم در کنار نوار ابزار پدیدار می شوند .
5- سپس روی آن کلیک کرده و آنرا برروری فرم خود قرار دهید . نام آنرا به sockc تغییر دهید .
Winsock یکی از ابزارهای برقراری ارتباط از طریق پورتهای TCP و UDP بین server و client در ویژوال بیسیک می باشد . تقریبا تمام ارتباطات استاندارد در ویژوال بیسیک از این طریق انجام می گیرد .
6- بعد از انجام مراحل بالا 5 Textbox به فرم مورد نظر خود اضافه می کنیم
سپس بر روی فرم مورد نظر خود دو بار راست کلیک می کنیم تا وارد محیط کد نویسی شویم . سپس در form_load( ) برنامه خود کدهای زیر را اضافه می کنیم .
Private Sub cmdConnect_Click()
If sockc.state = 0 Then
sockc.RemoteHost = txtip.Text
sockc.RemotePort = txtport.Text
sockc.Connect
Label3.Caption = status(sockc.state)
txtsend.SetFocus
Else
sockc.Close
Label3.Caption = status(sockc.state)
End If
Label3.Caption = status(sockc.state)
End Sub
تنظیم پروتکل :
برای تنظیم پروتکل شما می توانید از یکی از دو حالت sckTCPProtocol و sckUDPProtocol استفاده کنید که ما در اینجا از خاصیت sckTCPProtocol استفاده کرده ایم .
مشخص کردن نام کامپیوتر :
برای اتصال به کامپیوتر راه دور شما باید IP ویا نام دوستانه آنرا بدانید. IP کامپیوترهای شخصی 127.0.0.1 می باشد که این رشته را به عنوان مقدار برای خاصیت RemoteHost قرار می دهیم .
مشخص کردن پورت کامپیوتر ها :
برای اینکه کامپیوتر های راه دور بتوانند با یکدیگر ارتباط برقرار کنند بایستی یک شماره پورت برای نرم افزارهای دو طرف یعنی client و server انتخاب می کنیم که در واقع نرم افزارها از طریق این پورت با یکدیگر ارتباط برقرار می کنند .و این پورت به عنوان ورودیها و خروجیهای دو نرم افزار عمل می کند که ما در اینجا مقدار خاصیت RemotePort را برابر رشته 5050 قرار داده ایم .
سپس مقدار دو socks.protocolو socks.local port را به ترتیب برابر با 127.0.0.1 و 5050 قرار داده ایم که وقتی برنامه client اجرا می شود برای کاربر مشخص شود که برنامه بر روی چه IP و پورتی کار می کند .
بعد از این کار مقدار را برابر مقداری که یک تابع بر می گرداند قرار داده ایم . کار این تایع به این صورت است که در هر لحظه وضعیت برنامه client را مشخص می کند در واقع sockc.state داخل پرانتز یک عدد را برمی گرداند .
تعریف تابع status :
unction status(state As Integer)
Select Case state
Case 0
status = "closed"
Case 1
status = "open"
Case 2
status = "listening..."
Case 6
status = "connecting..."
Case 7
status = "connected"
Case 9
status = "ERROR"
End Select
End Function
در اینجا برای انتخابهای 0 تا 9 مقدار status را با یک پیغام مناسب مقدار دهی کرده ایم .
کد برنامه
Chat 1-Chat 1
----------------------------------
Client
----------------------------------
Option Explicit
Private Sub cmdClose_Click()
sockc.Close
End Sub
Private Sub cmdConnect_Click()
If sockc.state = 0 Then
sockc.RemoteHost = txtip.Text
sockc.RemotePort = txtport.Text
sockc.Connect
Label3.Caption = status(sockc.state)
txtsend.SetFocus
Else
sockc.Close
Label3.Caption = status(sockc.state)
End If
Label3.Caption = status(sockc.state)
End Sub
Private Sub cmdSend_Click()
If sockc.state = sckConnected Then
sockc.SendData txtsend.Text
Label3.Caption = "Sending Data"
Else
Label3.Caption = "Not connected to host"
End If
End Sub
Private Sub sockc_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
sockc.GetData sData,vbString
txtget.Text = sData
Label3.Caption = "Received Data"
End Sub
Private Sub sockc_SendComplete()
Label3.Caption = "Data Send"
End Sub
Function status(state As Integer)
Select Case state
Case 0
status = "closed"
Case 1
status = "open"
Case 2
status = "listening..."
Case 6
status = "connecting..."
Case 7
status = "connected"
Case 9
status = "ERROR"
End Select
End Function
Server
-------------------------------------
Function Status (State As Integer)
Select Case state
Case 0
status = "closed"
Case 1
status = "open"
Case 2
status = "listening..."
Case 6
status = "connecting..."
Case 7
status = "connected"
Case 9
status = "ERROR"
End Select
End Function
Private Sub Form_Load()
socks.Protocol = sckTCPProtocol
socks.LocalPort = 5050
socks.listen
lblhost.Caption = socks.LocalHostName
lblip.Caption = socks.LocalIP
lblstatus.Caption = status(socks.state)
End Sub
Private Sub listen_Click()
If socks.state = sckClose Then
socks.listen
Else
socks.Close
End If
lblstatus.Caption = status(socks.state)
End Sub
Private Sub Send_Click()
If socks.state = sckConnected Then
socks.SendData sendtxt.Text
Else
MsgBox "Not Connected To Server Please Check Again", vbExclamation, " ALERT"
End If
lblstatus.Caption = status(socks.state)
End Sub
Private Sub socks_Close()
socks.Close
socks.listen
lblstatus.Caption = status(socks.state)
End Sub
Private Sub socks_ConnectionRequest(ByVal request ID As Long)
socks.Close
socks.Accept request ID
lblstatus.Caption = status(socks.state)
End Sub
Private Sub socks_DataArrival(ByVal bytesTotal As Long)
Dim data As String
socks.GetData data
gettxt.Text = data
lblstatus.Caption = status(socks.state)
End Sub
Chat 1-Chat n
-----------------------------------
client
-----------------------------------
Private Sub Command1_Click()
If Winsock1.State = sckClosed Then
Winsock1.Connect
Else
Winsock1.Close
End If
End Sub
Private Sub Command2_Click()
If Winsock1.State = sckConnected Then
Winsock1.SendData Text1.Text
Else
MsgBox ("connection does not valid")
End If
End Sub
Private Sub Form_Load()
Winsock1.RemoteHost = "localhost"
Winsock1.RemotePort = 1001
End Sub
Private Sub Winsock1_Close()
Winsock1.Close
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strdata As String
Winsock1.GetData strdata
Text2.Text = strdata
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer,Description As String, ByVal
Scode As Long,ByVal Source As String,ByVal HelpFile As String,ByVal HelpContext As Long,CancelDisplay As Boolean)
MsgBox "socket on ( " & Form1.Caption & " )ERROR : " & Description
Winsock1.Close
End Sub
Server
-----------------------------------
Private intmax As Long
Private Sub Command1_Click()
Winsock1(Val(Text3.Text)).SendData Text1.Text
End Sub
Private Sub Form_Load()
intmax = 0
Winsock1(0).LocalPort = 1001
Winsock1(0).Listen
End Sub
Private Sub Winsock1_Close(Index As Integer)
Unload Winsock1(Index)
End Sub
Private Sub Winsock1_ConnectionRequest(Index As Integer,ByVal request ID As Long)
If Index = 0 Then
intmax = intmax + 1
Load Winsock1(intmax)
Winsock1(intmax).LocalPort = 0
Winsock1(intmax).Accept request ID
Load Text2(intmax)
End If
End Sub
Private Sub Winsock1_DataArrival(Index As Integer,ByVal bytesTotal As Long)
Dim strdata As String
Winsock1(Index).GetData strdata
Text2(Index).Text = strdata
List1.AddItem Text2(Index).Text & "-->" & Str(Index)
Text3.Text = Index
End Sub
درارتباط با پروژه
توضیحات کد برنامه:
Client
----------------------------------
Option Explicit
Private Sub cmdClose_Click()
sockc.Close
End Sub
این تابع برای این است که تمام client ها را ببندد وبعد ادامه کاررا انجام دهد.
Private Sub cmdConnect_Click()
If sockc.state = 0 Then
sockc.RemoteHost = txtip.Text
sockc.RemotePort = txtport.Text
sockc.Connect
Label3.Caption = status(sockc.state)
txtsend.SetFocus
Else
sockc.Close
Label3.Caption = status(sockc.state)
End If
Label3.Caption = status(sockc.state)
End Sub
در اینجا وضعیت client را بررسی می کندکه آیا از قبل connect هست یا نه.اگرconnect باشدآنرا می بندد( closed ).
از sockc.RemoteHost = txtip.Text sockc.RemotePort = txtport.Text برای شناسایی port و نمایش آدرس شخص فرستنده به صورت رشته استفاده می شود.
بعد connect می شود.
txtsend.SetFocus در واقع ایجاد یک ناظر بین client و server می باشد که نظاره گر آن ها می باشدومراقب ارسال و دریافت داده ها است.
در غیراینصورت client را می بندد.
Private Sub cmdSend_Click()
If sockc.state = sckConnected Then
sockc.SendData txtsend.Text
Label3.Caption = "Sending Data"
Else
Label3.Caption = "Not connected to host"
End If
End Sub
بررسی می کند که آیا وصل( connected ) هست یا نه.
اگروصل بود داده را به صورت متن ارسال می کند وبرچسب sending data نمایان می شود.
در غیراینصورت برچسب Not connected to host ظاهر می گردد.
Private Sub sockc_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
sockc.GetData sData,vbString
txtget.Text = sData
Label3.Caption = "Received Data"
End Sub
این تابع برای تعریف متغیرها استفاده می شود.
درآن آرایه ای با نام sData تعریف شده و خروجی آن رشته می باشد.
وجهت مرتبط ساختن به sockc از GetData استفاده می کند.در اینجا دو متغیر sData,vbString داریم.
خروجی آن از نوع متن می باشد.
وهنگامی که داده را دریافت می کند برچسب Received Data نمایان می شود.
Private Sub sockc_SendComplete()
Label3.Caption = "Data Send"
End Sub
این تابع برای ارسال است.هنگامی که داده فرستاده می شود برچسب Data Send نمایان می شود.
Function status(state As Integer)
Select Case state
Case 0
status = "closed"
Case 1
status = "open"
Case 2
status = "listening..."
Case 6
status = "connecting..."
Case 7
status = "connected"
Case 9
status = "ERROR"
End Select
End Function
این تابع جهت بررسی وضعیت می باشد.
اگر 0 بود آن را می بندد
اگر 1 بود آن را باز می کند
اگر 2 بود وقفه ایجاد می کند......وبه همین ترتیب تا آخر.
Server
------------------------------------
Function Status (State As Integer)
Select Case state
Case 0
status = "closed"
Case 1
status = "open"
Case 2
status = "listening..."
Case 6
status = "connecting..."
Case 7
status = "connected"
Case 9
status = "ERROR"
End Select
End Function
همانطور که گفته شد این تابع بررسی وضعیت می باشد.
Private Sub Form_Load()
socks.Protocol = sckTCPProtocol
socks.LocalPort = 5050
socks.listen
lblhost.Caption = socks.LocalHostName
lblip.Caption = socks.LocalIP
lblstatus.Caption = status(socks.state)
End Sub
می دانیم که دو نوع پروتکل وجود دارد. UDP و TCP IP .
که در UDP نیازی به اتصال نمی باشدولی در TCPIP می بایست حتما ارتباط یا عدم ارتباط بررسی شود.
دراین برنامه
فرمت این مقاله به صورت Word و با قابلیت ویرایش میباشد
تعداد صفحات این مقاله 82 صفحه
پس از پرداخت ، میتوانید مقاله را به صورت انلاین دانلود کنید