VB.NET Socket编程实际操作方法介绍

开发 后端
我们今天就通过一段基于服务器中的代码实现来为大家详细讲解有关VB.NET Socket编程的相关操作方法,希望能对又需要的朋友有所帮助。

 VB.NET 应用范围非常广泛。我们可以在VB.NET环境中进行一些特定语言的编写。下面就来看一下VB.NET Socket编程的相关方法。一直以来很想学习Socket编程方面的应用,比如怎样通过Socket编程实现单片机与PC的TCP连接通信。在单片机嵌入网卡芯片与PC进行连接通信,实现PC的web方式对单片机所控制的设备的状态管理,例如智能家居方面的应用。#t#

下面通过例子来学习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编程的具体用法就为大家介绍到这里。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-30 15:53:28

Silverlight

2010-01-07 18:05:18

VB.NET事务处理

2010-01-11 10:19:18

VB.NET启动外部程

2010-01-14 14:46:57

2010-01-07 18:17:00

VB.NET连接SAP

2010-01-11 15:43:06

VB.NET类属性

2010-01-07 10:28:04

VB.NET实现接口

2010-01-11 10:34:41

VB.NET图像操作

2010-01-04 16:50:04

Silverlight

2010-01-21 15:56:31

VB.NET文本框

2010-01-07 11:07:20

VB.NET读取INI

2010-01-07 15:37:35

VB.NET ForNext循环

2009-10-23 17:22:48

VB.NET编程

2010-01-07 15:25:11

VB.NET数组

2010-01-22 10:41:33

VB.NET声明结构

2009-11-10 12:42:47

VB.NET Prin

2010-01-11 11:37:08

VB.NET操作CSV

2010-02-03 10:23:47

C++操作符重载

2010-09-30 10:41:29

2010-01-15 17:51:51

VB.NET创建临时文
点赞
收藏

51CTO技术栈公众号