溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB.NET中Socket編程類怎么用

發(fā)布時間:2021-12-02 13:56:43 來源:億速云 閱讀:472 作者:小新 欄目:編程語言

小編給大家分享一下VB.NET中Socket編程類怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一直以來很想學習Socket編程方面的應用,比如怎樣通過Socket編程實現單片機與PC的TCP連接通信。在單片機嵌入網卡芯片與PC進行連接通信,實現PC的web方式對單片機所控制的設備的狀態(tài)管理,例如智能家居方面的應用。

下面通過例子來學習VB.NET Socket編程類的應用,下面的程序是服務器中的代碼實現:

Visual Basic ---tcpserver

  1. Imports System  

  2. Imports System.Net  

  3. Imports System.Net.Sockets  

  4. Imports System.Text  

  5. Imports System.Threading  

  6. Imports Microsoft.VisualBasic  

  7. ' State object for reading client 
    data asynchronously  

  8. Public Class StateObject  

  9. ' Client socket.  

  10. Public workSocket As Socket = Nothing 

  11. ' Size of receive buffer.  

  12. Public Const BufferSize As Integer = 1024 

  13. ' Receive buffer.  

  14. Public buffer(BufferSize) As Byte  

  15. ' Received data string.  

  16. Public sb As New StringBuilder  

  17. End Class 'StateObject  

  18. Public Class AsynchronousSocket
    Listener  

  19. ' Thread signal.  

  20. Public Shared allDone As New Manual
    ResetEvent(False)  

  21. ' This server waits for a connection 
    and then uses asychronous operations to  

  22. ' accept the connection, get data from 
    the connected client,   

  23. ' echo that data back to the 
    connected client.  

  24. ' It then disconnects from the 
    client and waits for another client.   

  25. Public Shared Sub Main()  

  26. ' Data buffer for incoming data.  

  27. Dim bytes() As Byte = New [Byte](1023) {}  

  28. ' Establish the local endpoint for the socket.  

  29. Dim ipHostInfo As IPHostEntry = 
    Dns.Resolve(Dns.GetHostName())  

  30. Dim ipAddress As IPAddress = 
    ipHostInfo.AddressList(0)  

  31. Dim localEndPoint As New IPEndPoint
    (ipAddress, 11000)  

  32. ' Create a TCP/IP socket.  

  33. Dim listener As New Socket(AddressFamily.
    InterNetwork, SocketType.Stream, ProtocolType.Tcp)  

  34. ' Bind the socket to the local endpoint 
    and listen for incoming connections.  

  35. listener.Bind(localEndPoint)  

  36. listener.Listen(100)  

  37. While True  

  38. ' Set the event to nonsignaled state.  

  39. allDone.Reset()  

  40. ' Start an asynchronous socket to listen 
    for connections.  

  41. Console.WriteLine("Waiting for a connection...")  

  42. listener.BeginAccept(New AsyncCallback
    (AddressOf AcceptCallback), listener)  

  43. ' Wait until a connection is made and 
    processed before continuing.  

  44. allDone.WaitOne()  

  45. End While  

  46. End Sub 'Main  

  47. Public Shared Sub AcceptCallback(ByVal ar 
    As IAsyncResult)  

  48. ' Get the socket that handles the client request.  

  49. Dim listener As Socket = CType(ar.AsyncState, Socket)  

  50. ' End the operation.  

  51. Dim handler As Socket = listener.EndAccept(ar)  

  52. ' Create the state object for the async receive.  

  53. Dim state As New StateObject  

  54. state.workSocket = handler 

  55. handler.BeginReceive(state.buffer, 0, StateObject.
    BufferSize, 0, New AsyncCallback(AddressOf 
    ReadCallback), state)  

  56. End Sub 'AcceptCallback  

  57. Public Shared Sub ReadCallback(ByVal ar As 
    IAsyncResult)  

  58. Dim content As StringString = String.Empty  

  59. ' Retrieve the state object and the handler socket  

  60. ' from the asynchronous state object.  

  61. Dim state As StateObject = CType(ar.AsyncState, 
    StateObject)  

  62. Dim handler As Socket = state.workSocket  

  63. ' Read data from the client socket.   

  64. Dim bytesRead As Integer = handler.EndReceive(ar)  

  65. If bytesRead > 0 Then  

  66. ' There might be more data, so store the data 
    received so far.  

  67. state.sb.Append(Encoding.ASCII.GetString
    (state.buffer, 0, bytesRead))  

  68. ' Check for end-of-file tag. If it is not there, read   

  69. ' more data.  

  70. content = state.sb.ToString()  

  71. If content.IndexOf("<EOF>") > -1 Then  

  72. ' All the data has been read from the   

  73. ' client. Display it on the console.  

  74. Console.WriteLine("Read {0} bytes from socket. "
     + vbLf + " Data : {1}", content.Length, content)  

  75. ' Echo the data back to the client.  

  76. Send(handler, content)  

  77. Else  

  78. ' Not all data received. Get more.  

  79. handler.BeginReceive(state.buffer, 0, StateObject.
    BufferSize, 0, New AsyncCallback(AddressOf 
    ReadCallback), state)  

  80. End If  

  81. End If  

  82. End Sub 'ReadCallback  

  83. Private Shared Sub Send(ByVal handler As Socket, 
    ByVal data As String)  

  84. ' Convert the string data to byte data using 
    ASCII encoding.  

  85. Dim byteData As Byte() = Encoding.ASCII.GetBytes(data)  

  86. ' Begin sending the data to the remote device.  

  87. handler.BeginSend(byteData, 0, byteData.Length, 0, 
    New AsyncCallback(AddressOf SendCallback), handler)  

  88. End Sub 'Send  

  89. Private Shared Sub SendCallback(ByVal ar As IAsyncResult)  

  90. ' Retrieve the socket from the state object.  

  91. Dim handler As Socket = CType(ar.AsyncState, Socket)  

  92. ' Complete sending the data to the remote device.  

  93. Dim bytesSent As Integer = handler.EndSend(ar)  

  94. Console.WriteLine("Sent {0} bytes to client.", bytesSent)  

  95. handler.Shutdown(SocketShutdown.Both)  

  96. handler.Close()  

  97. ' Signal the main thread to continue.  

  98. allDone.Set()  

  99. End Sub 'SendCallback  

  100. End Class 'AsynchronousSocketListener 

看完了這篇文章,相信你對“VB.NET中Socket編程類怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI