多线程、Socket技术及委托技术的关系

时间:2022-12-17 10:45:38
这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、Socket技术及委托技术。于是在网上找了一些关于Socket技术的资料,加上学过的线程的一点知识,开始我的整合编程。深知自己一直都对VB没怎么兴趣的,感觉他不是真正的编程,VB是易学,易懂,易理解,想想还是花点时间学下,感觉有一天会有用的,于是一时心血来潮,凭着自己埋头苦干的边学东西边做软件,还好有其他编程软件的一点经验吧,没走偏了,一直都很想写个文章做个纪念,最令我深刻的、学到最有用的东西也就是多线程、Socket技术、委托技术。现在开始我的VB编程:

  第一步:什么是多线程?如果一个窗体里创建一个线程,他就是一个多线程,是两个线程的多线程,窗体显示及控件的管理本身就有一个线程控件,叫UI线程(自己理解应该是用户界面的线程吧!!呵呵),是主线程,而创建的线程则是子线程。那么什么是Socket呢?Socket就是套接字,通过Socket,有可以作为Server端的Socket,也有作为Client端的Socket,服务端开启一个子线程来监听客户端发来的所有信息,并可以发送回信息,实现数据双向通信。聊天软件很多都是基于Socket的编写出来的。好了,什么是委托技术呢?简单的说是就有一个人,他没有能力完成想要做的事,出钱委让给别人去完成,像某某公司经理要求你开发个竞赛软件,他本身没有能力去完成这样的事,所以出钱让你去完成。好了,明白了是什么后,接下来写下一些代码吧!!!!!

  第二步:多线程例子

  VB中多线程可以传值

多线程、Socket技术及委托技术的关系Dim  th  as  System.Threading.Thread
多线程、Socket技术及委托技术的关系th 
=   New  System.Threading.Thread( Addressof  对象名(或类名).方法)
多线程、Socket技术及委托技术的关系对象名(或是类名).属性 
=  值        ' 通过这样可以实现线程传参
多线程、Socket技术及委托技术的关系
.......
多线程、Socket技术及委托技术的关系th.start()

  也可以返回值(通过委托技术实现),在做竞赛软件时,遇到一个问题,当在子线程里面去New 一个Form或是控件时,都会使窗体出现假死,于是在网上找了一些资料及查MSDN后才知道,原来子线程是没有能力去操控UI线程的控件,这里只能用委托技术,--------------------------这个是很好的一个说明==========呵呵=========

多线程、Socket技术及委托技术的关系Dim th  as  System.Threading.Thread
多线程、Socket技术及委托技术的关系th 
=  New System.Threading.Thread(Addressof 方法名1)
多线程、Socket技术及委托技术的关系th.start()
多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系Delegate Sub DelegateHandler(ByVal 参数 
as  String)    ' 声明一个委托
多线程、Socket技术及委托技术的关系
private  Sub 方法名1()
多线程、Socket技术及委托技术的关系    dim dh 
as  DelegateHandler  =  New DelegateHandler(AddressOf 方法名2)
多线程、Socket技术及委托技术的关系    me.invoke(dh, 
new  Object() {"value"} )
多线程、Socket技术及委托技术的关系End Sub
多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系
private  Sub 方法名2(ByVal str  as  String)
多线程、Socket技术及委托技术的关系    
' 被委托给的方法    ,处理委托后的数据
多线程、Socket技术及委托技术的关系

多线程、Socket技术及委托技术的关系End Sub
多线程、Socket技术及委托技术的关系

  第三步:Socket技术例子

  (1)服务器端

  Socket是基于线程而创建的,在UI线程下创建子线程,线程方法中用一个死循环在监听客户端的信息,第收到一信息后,委托给UI线程方法去处理。示例代码:

多线程、Socket技术及委托技术的关系' 声明一个线程
多线程、Socket技术及委托技术的关系
Dim  t  As  System.Threading.Thread
多线程、Socket技术及委托技术的关系 t 
=   New  Thread( AddressOf  WaitData)
多线程、Socket技术及委托技术的关系 t.Start()

多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系    
Dim  s  As  Socket
多线程、Socket技术及委托技术的关系    
Public   Sub WaitData()
多线程、Socket技术及委托技术的关系        s 
= New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
多线程、Socket技术及委托技术的关系        
Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)
多线程、Socket技术及委托技术的关系        s.Bind(localEndPoint)
多线程、Socket技术及委托技术的关系        s.Listen(
100)
多线程、Socket技术及委托技术的关系        
Me.dealData(s)
多线程、Socket技术及委托技术的关系    
End Sub

多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系    
Private   Sub DealData(ByRef sock As Socket)
多线程、Socket技术及委托技术的关系        
While (True)
多线程、Socket技术及委托技术的关系            
Dim bytes As Byte() = New Byte(1024) {}
多线程、Socket技术及委托技术的关系            
Dim ss As Socket = s.Accept()
多线程、Socket技术及委托技术的关系            i 
= ss.Receive(bytes)
多线程、Socket技术及委托技术的关系            
Dim valstr As String = Encoding.Default.GetString(bytes, 0, i)
多线程、Socket技术及委托技术的关系            
'处理接收到的数据
多线程、Socket技术及委托技术的关系
      '见第二步线程与委托技术
多线程、Socket技术及委托技术的关系

多线程、Socket技术及委托技术的关系      
'发送回数据
多线程、Socket技术及委托技术的关系
      ss.Send(Encoding.Default.GetBytes("已收到!!Love you"))            '发回数据
多线程、Socket技术及委托技术的关系
        End While
多线程、Socket技术及委托技术的关系    
End Sub

  (2) 客户端

  只要求连接到服务器端,然后就Send数据,同时可以Receive数据。示例代码如下:

多线程、Socket技术及委托技术的关系        Try
多线程、Socket技术及委托技术的关系            
Dim  bytes  As   Byte ()  =   New   Byte ( 1024 ) {}
多线程、Socket技术及委托技术的关系            s 
=   New  Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
多线程、Socket技术及委托技术的关系            
Dim  localEndPoint  As   New  IPEndPoint(IPAddress.Parse( " 127.0.0.1 " ),  1024 )
多线程、Socket技术及委托技术的关系            s.Connect(localEndPoint)
多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系            s.Send(Encoding.Default.GetBytes(
" 要发送的数据 " ))
多线程、Socket技术及委托技术的关系            s.Receive(bytes)
多线程、Socket技术及委托技术的关系            
' 处理接收到的数据
多线程、Socket技术及委托技术的关系

多线程、Socket技术及委托技术的关系        
Catch  ex  As  Exception
多线程、Socket技术及委托技术的关系
多线程、Socket技术及委托技术的关系        
Finally
多线程、Socket技术及委托技术的关系           s.Close()
多线程、Socket技术及委托技术的关系        
End   Try

  第三步:委托技术

  其实就几步,声明委托、New一个委托并指定委托方法、调用invoke()方法,可以参考第一步。示例代码:

多线程、Socket技术及委托技术的关系Delegate   Sub DelegateHandler(ByVal str As String)         '声明一个委托
多线程、Socket技术及委托技术的关系
Dim dh As DelegateHandler = New DelegateHandler(AddressOf 方法名)       'New 出一个委托并指定委托方法
多线程、Socket技术及委托技术的关系
Me.invoke(dh, New Object(){"传递的参数"})                   '调用invoke方法
多线程、Socket技术及委托技术的关系

多线程、Socket技术及委托技术的关系
Private Sub 方法名(ByVal str As String)
多线程、Socket技术及委托技术的关系        
'处理委托的数据str
多线程、Socket技术及委托技术的关系

多线程、Socket技术及委托技术的关系
End Sub

 转自:http://www.bccn.net/Article/net/vbnet/jszl/200709/6478.html