文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

VB.NET中Socket编程类怎么用

2023-06-17 18:23

关注

小编给大家分享一下VB.NET中Socket编程类怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一直以来很想学习Socket编程方面的应用,比如怎样通过Socket编程实现单片机与PC的TCP连接通信。在单片机嵌入网卡芯片与PC进行连接通信,实现PC的web方式对单片机所控制的设备的状态管理,例如智能家居方面的应用。

下面通过例子来学习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编程类怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯