VB.Net Tutorial/Socket Network/Socket Client — различия между версиями

Материал из VB Эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:55, 26 мая 2010

Using Async Socket Client

<source lang="vbnet">Imports System.Net.Sockets Imports System.Net Imports System.Threading Imports System.Text Imports System.Windows.Forms public class UsingAsyncSocketClient

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   Inherits System.Windows.Forms.Form
   Public Sub New()
       MyBase.New()
       InitializeComponent()
   End Sub
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing Then
           If Not (components Is Nothing) Then
               components.Dispose()
           End If
       End If
       MyBase.Dispose(disposing)
   End Sub
   Private components As System.ruponentModel.IContainer
   Friend WithEvents btnListener As System.Windows.Forms.Button
   Friend WithEvents lblConnection As System.Windows.Forms.Label
   Friend WithEvents lblPort As System.Windows.Forms.Label
   Friend WithEvents txtPort As System.Windows.Forms.TextBox
   Friend WithEvents btnClose As System.Windows.Forms.Button
   Friend WithEvents btnReceive As System.Windows.Forms.Button
   Friend WithEvents txtMessage As System.Windows.Forms.TextBox
   Friend WithEvents Label1 As System.Windows.Forms.Label
   Friend WithEvents btnSend As System.Windows.Forms.Button
   Friend WithEvents Label2 As System.Windows.Forms.Label
   Friend WithEvents txtAddress As System.Windows.Forms.TextBox
   Friend WithEvents txtSend As System.Windows.Forms.TextBox
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
       Me.btnListener = New System.Windows.Forms.Button()
       Me.lblConnection = New System.Windows.Forms.Label()
       Me.lblPort = New System.Windows.Forms.Label()
       Me.txtPort = New System.Windows.Forms.TextBox()
       Me.btnClose = New System.Windows.Forms.Button()
       Me.btnReceive = New System.Windows.Forms.Button()
       Me.txtMessage = New System.Windows.Forms.TextBox()
       Me.txtSend = New System.Windows.Forms.TextBox()
       Me.Label1 = New System.Windows.Forms.Label()
       Me.btnSend = New System.Windows.Forms.Button()
       Me.txtAddress = New System.Windows.Forms.TextBox()
       Me.Label2 = New System.Windows.Forms.Label()
       Me.SuspendLayout()
       "
       "btnListener
       "
       Me.btnListener.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.btnListener.Location = New System.Drawing.Point(338, 48)
       Me.btnListener.Name = "btnListener"
       Me.btnListener.Size = New System.Drawing.Size(113, 32)
       Me.btnListener.TabIndex = 0
       Me.btnListener.Text = "Connect"
       "
       "lblConnection
       "
       Me.lblConnection.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.lblConnection.Location = New System.Drawing.Point(41, 96)
       Me.lblConnection.Name = "lblConnection"
       Me.lblConnection.Size = New System.Drawing.Size(92, 24)
       Me.lblConnection.TabIndex = 2
       Me.lblConnection.Text = "Info"
       "
       "lblPort
       "
       Me.lblPort.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.lblPort.Location = New System.Drawing.Point(20, 56)
       Me.lblPort.Name = "lblPort"
       Me.lblPort.Size = New System.Drawing.Size(113, 24)
       Me.lblPort.TabIndex = 3
       Me.lblPort.Text = "Port"
       "
       "txtPort
       "
       Me.txtPort.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.txtPort.Location = New System.Drawing.Point(143, 48)
       Me.txtPort.Name = "txtPort"
       Me.txtPort.Size = New System.Drawing.Size(133, 26)
       Me.txtPort.TabIndex = 4
       Me.txtPort.Text = "36000"
       "
       "btnClose
       "
       Me.btnClose.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.btnClose.Location = New System.Drawing.Point(461, 48)
       Me.btnClose.Name = "btnClose"
       Me.btnClose.Size = New System.Drawing.Size(102, 32)
       Me.btnClose.TabIndex = 5
       Me.btnClose.Text = "Disconnect"
       "
       "btnReceive
       "
       Me.btnReceive.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.btnReceive.Location = New System.Drawing.Point(338, 272)
       Me.btnReceive.Name = "btnReceive"
       Me.btnReceive.Size = New System.Drawing.Size(113, 32)
       Me.btnReceive.TabIndex = 6
       Me.btnReceive.Text = "Receive"
       "
       "txtMessage
       "
       Me.txtMessage.Location = New System.Drawing.Point(143, 96)
       Me.txtMessage.Multiline = True
       Me.txtMessage.Name = "txtMessage"
       Me.txtMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
       Me.txtMessage.Size = New System.Drawing.Size(430, 88)
       Me.txtMessage.TabIndex = 7
       Me.txtMessage.Text = ""
       "
       "txtSend
       "
       Me.txtSend.Location = New System.Drawing.Point(143, 192)
       Me.txtSend.Multiline = True
       Me.txtSend.Name = "txtSend"
       Me.txtSend.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
       Me.txtSend.Size = New System.Drawing.Size(430, 64)
       Me.txtSend.TabIndex = 9
       Me.txtSend.Text = ""
       "
       "Label1
       "
       Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.Label1.Location = New System.Drawing.Point(10, 192)
       Me.Label1.Name = "Label1"
       Me.Label1.Size = New System.Drawing.Size(144, 24)
       Me.Label1.TabIndex = 8
       Me.Label1.Text = "Content"
       "
       "btnSend
       "
       Me.btnSend.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.btnSend.Location = New System.Drawing.Point(461, 272)
       Me.btnSend.Name = "btnSend"
       Me.btnSend.Size = New System.Drawing.Size(112, 32)
       Me.btnSend.TabIndex = 10
       Me.btnSend.Text = "Send"
       "
       "txtAddress
       "
       Me.txtAddress.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.txtAddress.Location = New System.Drawing.Point(143, 16)
       Me.txtAddress.Name = "txtAddress"
       Me.txtAddress.Size = New System.Drawing.Size(420, 26)
       Me.txtAddress.TabIndex = 12
       Me.txtAddress.Text = "192.168.0.70"
       "
       "Label2
       "
       Me.Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(136, Byte))
       Me.Label2.Location = New System.Drawing.Point(20, 21)
       Me.Label2.Name = "Label2"
       Me.Label2.Size = New System.Drawing.Size(113, 24)
       Me.Label2.TabIndex = 11
       Me.Label2.Text = "Address"
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
       Me.ClientSize = New System.Drawing.Size(665, 309)
       Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.txtAddress, Me.Label2, Me.btnSend, Me.txtSend, Me.Label1, Me.txtMessage, Me.btnReceive, Me.btnClose, Me.txtPort, Me.lblPort, Me.lblConnection, Me.btnListener})
       Me.Name = "Form1"
       Me.Text = "Form1"
       Me.ResumeLayout(False)
   End Sub
   Dim strMessage
   Dim myConnect As Socket
   Dim bteAccept(65536) As Byte
   Dim bteSend(65536) As Byte
   Private Sub btnListener_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListener.Click
       Dim myThread As New Thread(New ThreadStart(AddressOf StartListen))
       myThread.Start()
   End Sub
   Private Sub btnReceive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReceive.Click
       Dim myThread As New Thread(New ThreadStart(AddressOf ReceiveStart))
       myThread.Start()
   End Sub
   Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
       Dim myThread As New Thread(New ThreadStart(AddressOf SendStart))
       myThread.Start()
   End Sub
   Private Sub StartListen()
       Dim intPort As Integer
       Dim bidEndPoint As IPEndPoint
       intPort = Integer.Parse(txtPort.Text)
       bidEndPoint = New IPEndPoint(IPAddress.Parse(txtAddress.Text), intPort)
       myConnect = New Socket _
                    (AddressFamily.InterNetwork, _
                    SocketType.Stream, _
                    ProtocolType.Tcp)
       Try
           Dim myAsyncCallBack As New AsyncCallback(AddressOf ConnectEnd)
           myConnect.BeginConnect(bidEndPoint, myAsyncCallBack, myConnect)
           txtMessage.Text += vbCrLf + "Waiting..."
           Thread.Sleep(500)
           txtSend.Text += "Begin ----" + vbCrLf
           Thread.Sleep(500)
           txtSend.Text += "This is the first string ..." + vbCrLf
           Thread.Sleep(500)
           txtSend.Text += "This is the second string ...." + vbCrLf
           Thread.Sleep(500)
           txtSend.Text += "End-------" + vbCrLf
       Catch ex As SocketException
           Console.WriteLine(ex.Message)
       End Try
   End Sub
   Private Sub ConnectEnd(ByVal pIAsyncResult As IAsyncResult)
       myConnect.EndConnect(pIAsyncResult)
       txtMessage.Text += vbCrLf + "Successful"
   End Sub
   Private Sub ReceiveStart()
       Dim myAsyncCallBack As New AsyncCallback(AddressOf ReceiveData)
       myConnect.BeginReceive _
         (bteAccept, 0, 65536, 0, _
         myAsyncCallBack, myConnect)
       txtMessage.Text += vbCrLf + "Receive"
   End Sub
   Private Sub ReceiveData(ByVal pIAsyncResult As IAsyncResult)
       Dim intByte As Integer
       intByte = myConnect.EndReceive(pIAsyncResult)
       If intByte > 0 Then
           strMessage += Encoding.ASCII.GetString(bteAccept)
           txtSend.Text = "" + strMessage
       End If
   End Sub
   Private Sub SendStart()
       Dim myAsyncCallBack As New AsyncCallback(AddressOf SendData)
       bteSend = Encoding.ASCII.GetBytes(txtSend.Text)
       myConnect.BeginSend _
         (bteSend, 0, bteSend.Length, _
         SocketFlags.DontRoute, myAsyncCallBack, myConnect)
   End Sub
   Private Sub SendData(ByVal pIAsyncResult As IAsyncResult)
       Dim intSend As Integer
       intSend = myConnect.EndSend(pIAsyncResult)
       txtMessage.Text += vbCrLf + "Message sent" + intSend.ToString + " bytes "
   End Sub
   Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
       myConnect.Close()
   End Sub
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   End Sub

End Class</source>