VB.NET经过长时间的发展,很多用户都很了解VB.NET Socket编程了,这里我发表一下个人理解,和大家讨论讨论。一直以来很想学习VB.NET Socket编程方面的应用,比如怎样通过VB.NET Socket编程实现单片机与PC的TCP连接通信。在单片机嵌入网卡芯片与PC进行连接通信,实现PC的web方式对单片机所控制的设备的状态管理,例如智能家居方面的应用。
下面通过例子来学习VB.NET Socket编程类的应用,下面的程序分别分服务器和客户端两部分:
- ImportsSystem
- ImportsSystem.Net
- ImportsSystem.Net.Sockets
- ImportsSystem.Text
- ImportsSystem.Threading
- ImportsMicrosoft.VisualBasic
- 'Stateobjectforreadingclientdataasynchronously
- PublicClassStateObject
- 'Clientsocket.
- PublicworkSocketAsSocket=Nothing
- 'Sizeofreceivebuffer.
- PublicConstBufferSizeAsInteger=1024
- 'Receivebuffer.
- Publicbuffer(BufferSize)AsByte
- 'Receiveddatastring.
- PublicsbAsNewStringBuilder
- EndClass'StateObject
- PublicClassAsynchronousSocketListener
- 'Threadsignal.
- PublicSharedallDoneAsNewManualResetEvent(False)
- 'Thisserverwaitsforaconnectionandthenusesasychronousoperationsto
- 'accepttheconnection,getdatafromtheconnectedclient,
- 'echothatdatabacktotheconnectedclient.
- 'Itthendisconnectsfromtheclientandwaitsforanotherclient.
- PublicSharedSubMain()
- 'Databufferforincomingdata.
- Dimbytes()AsByte=New[Byte](1023){}
- 'Establishthelocalendpointforthesocket.
- DimipHostInfoAsIPHostEntry=Dns.Resolve(Dns.GetHostName())
- DimipAddressAsIPAddress=ipHostInfo.AddressList(0)
- DimlocalEndPointAsNewIPEndPoint(ipAddress,11000)
- 'CreateaTCP/IPsocket.
- DimlistenerAsNewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)
- 'Bindthesockettothelocalendpointandlistenforincomingconnections.
- listener.Bind(localEndPoint)
- listener.Listen(100)
- WhileTrue
- 'Settheeventtononsignaledstate.
- allDone.Reset()
- 'Startanasynchronoussockettolistenforconnections.
- Console.WriteLine("Waitingforaconnection...")
- listener.BeginAccept(NewAsyncCallback(AddressOfAcceptCallback),listener)
- 'Waituntilaconnectionismadeandprocessedbeforecontinuing.
- allDone.WaitOne()
- EndWhile
- EndSub'Main
- PublicSharedSubAcceptCallback(ByValarAsIAsyncResult)
- 'Getthesocketthathandlestheclientrequest.
- DimlistenerAsSocket=CType(ar.AsyncState,Socket)
- 'Endtheoperation.
- DimhandlerAsSocket=listener.EndAccept(ar)
- 'Createthestateobjectfortheasyncreceive.
- DimstateAsNewStateObject
- state.workSocket=handler
- handler.BeginReceive(state.buffer,0,StateObject.
BufferSize,0,NewAsyncCallback(AddressOfReadCallback),state)- EndSub'AcceptCallback
- PublicSharedSubReadCallback(ByValarAsIAsyncResult)
- DimcontentAsString=String.Empty
- 'Retrievethestateobjectandthehandlersocket
- 'fromtheasynchronousstateobject.
- DimstateAsStateObject=CType(ar.AsyncState,StateObject)
- DimhandlerAsSocket=state.workSocket
- 'Readdatafromtheclientsocket.
- DimbytesReadAsInteger=handler.EndReceive(ar)
- IfbytesRead>0Then
- 'Theremightbemoredata,sostorethedatareceivedsofar.
- state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead))
- 'Checkforend-of-filetag.Ifitisnotthere,read
- 'moredata.
- content=state.sb.ToString()
- Ifcontent.IndexOf("<EOF>")>-1Then
- 'Allthedatahasbeenreadfromthe
- 'client.Displayitontheconsole.
- Console.WriteLine("Read{0}bytesfromsocket."+vbLf+"Data:{1}",content.Length,content)
- 'Echothedatabacktotheclient.
- Send(handler,content)
- Else
- 'Notalldatareceived.Getmore.
- handler.BeginReceive(state.buffer,0,StateObject.
BufferSize,0,NewAsyncCallback(AddressOfReadCallback),state)- EndIf
- EndIf
- EndSub'ReadCallback
- PrivateSharedSubSend(ByValhandlerAsSocket,ByValdataAsString)
- 'ConvertthestringdatatobytedatausingASCIIencoding.
- DimbyteDataAsByte()=Encoding.ASCII.GetBytes(data)
- 'Beginsendingthedatatotheremotedevice.
- handler.BeginSend(byteData,0,byteData.
Length,0,NewAsyncCallback(AddressOfSendCallback),handler)- EndSub'Send
- PrivateSharedSubSendCallback(ByValarAsIAsyncResult)
- 'Retrievethesocketfromthestateobject.
- DimhandlerAsSocket=CType(ar.AsyncState,Socket)
- 'Completesendingthedatatotheremotedevice.
- DimbytesSentAsInteger=handler.EndSend(ar)
- Console.WriteLine("Sent{0}bytestoclient.",bytesSent)
- handler.Shutdown(SocketShutdown.Both)
- handler.Close()
- 'Signalthemainthreadtocontinue.
- allDone.Set()
- EndSub'SendCallback
- EndClass'AsynchronousSocketListener
【编辑推荐】