ویژوال بیسیک پروژه CHAT 1-n و CHAT 1-1

كار با كنترل 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

۱- براي شروع سا خت برنامه client ابتدا ويژوال بيسيك را باز كرده و يك پروژه استاندارد را انتخاب و سپس آنرا باز مي كنيم

۲- سپس در قسمت ابزار راست كليك كرده و گزينه components… را انتخاب مي كنيم .

۳- از صفحه اي كه باز مي شود گزينه Microsoft WinSock Control 6 را انتخاب مي كنيم

۴- بعد از زدن دكمه ok دو كامپيوتر كوچك پشت سرهم در كنار نوار ابزار پديدار مي شوند .

۵- سپس روي آن كليك كرده و آنرا برروري فرم خود قرار دهيد . نام آنرا به sockc تغيير دهيد .

Winsock يكي از ابزارهاي برقراري ارتباط از طريق پورتهاي TCP و UDP بين server و client در ويژوال بيسيك مي باشد . تقريبا تمام ارتباطات استاندارد در ويژوال بيسيك از اين طريق انجام مي گيرد .

۶- بعد از انجام مراحل بالا ۵ 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 كامپيوترهاي شخصي ۱۲۷٫۰٫۰٫۱ مي باشد كه اين رشته را به عنوان مقدار براي خاصيت RemoteHost قرار مي دهيم .

مشخص كردن پورت كامپيوتر ها :
براي اينكه كامپيوتر هاي راه دور بتوانند با يكديگر ارتباط برقرار كنند بايستي يك شماره پورت براي نرم افزارهاي دو طرف يعني client و server انتخاب مي كنيم كه در واقع نرم افزارها از طريق اين پورت با يكديگر ارتباط برقرار مي كنند .و اين پورت به عنوان وروديها و خروجيهاي دو نرم افزار عمل مي كند كه ما در اينجا مقدار خاصيت RemotePort را برابر رشته ۵۰۵۰ قرار داده ايم .
سپس مقدار دو socks.protocolو socks.local port را به ترتيب برابر با ۱۲۷٫۰٫۰٫۱ و ۵۰۵۰ قرار داده ايم كه وقتي برنامه 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
در اينجا براي انتخابهاي ۰ تا ۹ مقدار 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()