ورود

View Full Version : استفاده از کنترل Winsock



mr_esmaily
جمعه 04 مهر 1382, 16:41 عصر
سلام
از کنترل Winsock برای برقراری ارتباط بین سرویس دهنده و سرویس گیرنده با دو پروتکل UDP و
TCP استفاده می شود.



پیاده سازی یک سرویس دهنده با پروتکل TCP :

ابتدا یک پروژه جدید باز کرده و کنترل Winsock و دو txtbox و یک Commandbutton روی فرم قرار دهید.نام یک تکست باکس را txtsend و نام دیگری راtxtoutput قرار داده و خاصیت Multiline آنرا به True ست کنید و نام کنترل Winsock را Tcpserver قرارداده و کد زیر را در پروژه خود کپی کنید :



Private Sub cmdsend_Click()
Call tcpserver.SendData("SERVER>>>" & txtsend.Text)
txtoutput.Text = txtoutput.Text & "SERVER>>>" & _
txtsend.Text & vbCrLf & vbCrLf
txtsend.Text = ""
txtoutput.SelStart = Len(txtoutput.Text)
End Sub

Private Sub Form_Load()
cmdsend.Enabled = False
tcpserver.LocalPort = 5000
Call tcpserver.Listen
End Sub
Private Sub Form_Terminate()
Call tcpserver.Close
End Sub
Private Sub tcpserver_Close()
cmdsend.Enabled = False
Call tcpserver.Close
txtoutput.Text = txtoutput.Text & _
"Client closed connection." & _
vbCrLf & vbCrLf
txtoutput.SelStart = Len(txtoutput.Text)
Call tcpserver.Listen
End Sub
Private Sub tcpserver_ConnectionRequest(ByVal requestID As Long)
If tcpserver.State <> sckClosed Then
Call tcpserver.Close
End If
cmdsend.Enabled = True
Call tcpserver.Accept(requestID)
txtoutput.Text = "Connection from IP address :" & _
tcpserver.RemoteHostIP & vbCrLf & "Port #:" & _
tcpserver.RemotePort & vbCrLf & vbCrLf
End Sub
Private Sub tcpserver_DataArrival(ByVal bytesTotal As Long)
Dim message As String
Call tcpserver.GetData(message)
txtoutput.Text = txtoutput.Text & message & vbCrLf & _
vbCrLf
txtoutput.SelStart = Len(txtoutput.Text)
End Sub
Private Sub tcpserver_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)
Dim result As Integer
result = MsgBox(Source & ":" & Description, vbOKOnly, _
"TCp/IP Error")
End Sub





پیاده سازی یک سرویس گیرنده با پروتکل TCP :

ابتدا یک پروژه جدید باز کرده و کنترل Winsock و دو txtbox و یک Commandbutton روی فرم قرار دهید.نام یک تکست باکس را txtsend و نام دیگری راtxtoutput قرار داده و خاصیت Multiline آنرا به True ست کنید و نام کنترل Winsock را Tcpclient قرارداده و کد زیر را در پروژه خود کپی کنید :



Private Sub cmdsend_Click()
Call tcpclient.SendData("CLIENT >>>" & txtsend.Text)
txtoutput.Text = txtoutput.Text & "CLIENT >>>" & _
txtsend.Text & vbCrLf & vbCrLf
txtoutput.SelStart = Len(txtoutput.Text)
txtsend.Text = ""
End Sub

Private Sub Form_Load()
cmdsend.Enabled = False
tcpclient.RemoteHost = _
InputBox("Enter the remot host IP address", _
"IP Address", "Localhost")
If tcpclient.RemoteHost = "" Then
tcpclient.RemoteHost = "Localhost"
End If
tcpclient.RemotePort = 5000
Call tcpclient.Connect
End Sub
Private Sub Form_Terminate()
Call tcpclient.Close
End Sub
Private Sub tcpclient_Close()
cmdsend.Enabled = False
Call tcpclient.Close
txtoutput.Text = txtoutput.Text & _
"Server closed connection" & vbCrLf
txtoutput.SelStart = Len(txtoutput)
End Sub

Private Sub tcpclient_Connect()
cmdsend.Enabled = True
txtoutput.Text = "Connected to IP address" & _
tcpclient.RemoteHostIP & vbCrLf & "Port #:" & _
tcpclient.RemotePort & vbCrLf & vbCrLf
End Sub
Private Sub tcpclient_DataArrival(ByVal bytesTotal As Long)
Dim message As String
Call tcpclient.GetData(message)
txtoutput.Text = txtoutput.Text & message & _
vbCrLf & vbCrLf
txtoutput.SelStart = Len(txtoutput)
End Sub
Private Sub tcpclient_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)
Dim result As Integer
result = MsgBox(Source & ":" & Description _
, vbOKOnly, "TCP/IP Error")
End Sub





پیاده سازی یک سرویس دهنده با پروتکل UDP:

ابتدا یک پروژه جدید باز کرده و کنترل Winsock و دو txtbox و یک Commandbutton روی فرم قرار دهید.نام یک تکست باکس را txtsend و نام دیگری راtxtoutput قرار داده و خاصیت Multiline آنرا به True ست کنید و نام کنترل Winsock را udpsever و خاصیت Protocol آنرابه sck UDPProtocol ست کرده و کد زیر را در پروژه خود کپی کنید :



Private Sub cmdsend_Click()
Call udpserver.SendData(txtsend.Text)
txtoutput.Text = txtoutput.Text & "Send Message :" & _
txtsend.Text & vbCrLf & vbCrLf
txtsend.Text = ""
txtoutput.SelStart = Len(txtoutput.Text)
udpserver.RemotePort = 0
End Sub

Private Sub Form_Load()
Call udpserver.Bind(5000)
End Sub
Private Sub Form_Terminate()
Call udpserver.Close
End Sub
Private Sub udpserver_DataArrival(ByVal bytesTotal As Long)
Dim message As String
Call udpserver.GetData(message)
txtoutput.Text = txtoutput.Text & "Form1 Ip Address :" & _
udpserver.RemoteHostIP & vbCrLf & "Port #: " & _
Str$(udpserver.RemotePort) & vbCrLf & "Bytes received :" & _
Str$(bytesTotal) & vbCrLf & "Message :" & message & vbCrLf & _
vbCrLf
End Sub




پیاده سازی یک سرویس'گیرنده با پروتکل UDP:

ابتدا یک پروژه جدید باز کرده و کنترل Winsock و دو txtbox و یک Commandbutton روی فرم قرار دهید.نام یک تکست باکس را txtsend و نام دیگری راtxtoutput قرار داده و خاصیت Multiline آنرا به True ست کنید و نام کنترل Winsock را udpclient و خاصیت Protocol آنرابه sck UDPProtocol ست کرده و کد زیر را در پروژه خود کپی کنید :



Private Sub cmdsend_Click()
Call udpclient.SendData(txtsend.Text)
txtoutput.Text = txtoutput.Text & "Send Message :" & _
txtsend.Text & vbCrLf & vbCrLf
txtsend.Text = ""
txtoutput.SelStart = Len(txtoutput.Text)

End Sub

Private Sub Form_Load()
udpclient.RemoteHost = InputBox("Enter the remote host IP address" _
, "IP address", "localhost")
If udpclient.RemoteHost = "" Then
udpclient.RemoteHost = "localhost"
End If
udpclient.RemotePort = 5000
End Sub

Private Sub Form_Terminate()
Call udpclient.Close
End Sub

Private Sub udpclient_DataArrival(ByVal bytesTotal As Long)
Dim message As String
Call udpclient.GetData(message)
txtoutput.Text = txtoutput.Text & "Form1 Ip Address :" & _
udpclientRemoteHostIP & vbCrLf & "Port #: " & _
Str$(udpclient.RemotePort) & vbCrLf & "Bytes received :" & _
Str$(bytesTotal) & vbCrLf & "Message :" & message & vbCrLf
End Sub


با کمی سعی می توانید یک برنامه چت درست کنید! :wink:


موفق و پیروز باشید 8)

ایران ویج
چهارشنبه 16 مهر 1382, 07:44 صبح
خیلی زیبا وجالب بود منکه خیلی استفاده کردم ممنون از زحمت شما. بخصوص قسمت ارتباط با پروتکل UDP اون که واقعا زیبا و قشنگ بود(من برنامه شما رو جدا جدا ساختم و روی کامپیوترم اجراشون کردم هر دو تا شونو بعد وقتی از یکی میفرستادم اون یکی نشون میداد)
جند سوال هم داشتم.
1- این برنامه واسه ارتباط مستقیم میان دو کامیوتر آنهم از نوع یکی کلاینت و دیگری سرور هستش آیا میشه با تغییر اون ارتباط همگانی بشه یعنی اگه چند تا کامپیوتر هم باشند همه پیام های هم رو ببینند یعنی ما همه هم کلاینت باشیم هم سرور .
2- این برنامه مستقیما با IP کار میکنه یعنی یکی از الزامات اون داشتن یه IP مستقل هست (بدلیل ماهیت WinSock) حالا اگه من IP مستقل نداشته باشم چی ؟ یعنی این برنامه رو میشه توی یک شبکه محلی اجرا کرد نه روی اینترنت .



خیلی ممنون
ایران ویج

mr_esmaily
چهارشنبه 16 مهر 1382, 13:25 عصر
سلام
از لطفتون خیلی ممنون :oops:

در مورد سوال اولتون باید بگم تا اونجایی که من میدونم برای یه همچین کاری در روش UDP باید ابتدا تمامی پیامها به سرور فرستاده شده سپس سرور پیامها را به مقصد ارسال کند. در این روش فقط سرور به IP افراد دسترسی دارد و افراد فقط پیامهایشان را به آدرس IP سرور می فرستند!بنابر این شما باید یک برنامه سرور(با کمی تغییرات) و چند برنامه کلاینت طراحی کنید.

درمورد سوال دومتونم باید بگم فکر کنم هر شبکه محلی به کاربراش یه IP اختصاص می ده که شما می تونید بوسیله اون ارتباط بین کامپیوتر های مورد نظر رو برقرار کنید.

ایران ویج
شنبه 19 مهر 1382, 10:05 صبح
با درود به شما :
واسه اینکه نخوایید حتما یه سرور و چند کلاینت داشته باشید میتونید ای پی مربوط به لوکال و ریموت رو هر دو شو مثلا بدید 255.255.255.255 در این حالت دیگه وین سوکت موقع ارسال به همه کامپیوترهایی که آی پیشون اینه اطلاعات رو ارسال میکنه این فقط حسنش اینه که دیگه لازم نیست حتما کلاینت سروری کار کنی اما یکی از کامپوترهایی که اطلاعات دوباره بهش فرستادهمیشه کامپیوتر فرستنده هم هست :lol: که باید با برنامه نویسی مشکل رو حل کرد.

مخلصتیم
ایران ویج

aminvb
دوشنبه 22 فروردین 1390, 01:24 صبح
آقا این کنترل کجاست من این کنترل
Winsock

رو پیدا نکردم ببخشید اگه مبتدیانه بود سوالم

alimanam
سه شنبه 23 فروردین 1390, 13:09 عصر
با سلام


کنترل کجاست Winsock یه ActiveX هستش پس اگه در لیست Com Components نتونستی پیداش کنی میتونی از اینجا (http://www.ocxdump.com/download-ocx-files_new.php/ocxfiles/M/MSWINSCK.OCX/6.00.81694/download.html)دانلود کنی . البته من فکر میکنم در فضای نام System.Net.Sockets همین اتفاقات بالا رو میشه ایجاد کرد ( یعنی نیازی به استفاده از این کامپونت اکتیوایکس نیست چون ناسلامتی دارین با دات نت برنامه مینویسین و همه امکانات رو شاید بیشتر رو در اختیارتون گذاشته )

http://up.iranblog.com/images/vhdbld248tgjultmz72.jpg

موفق باشید ./