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

 
  这几天忙着开发一个竞赛 软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、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技术及委托技术的关系多线程、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技术及委托技术的关系多线程、Socket技术及委托技术的关系    
Public   Sub WaitData() 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技术及委托技术的关系多线程、Socket技术及委托技术的关系    
Private   Sub DealData() 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技术及委托技术的关系 多线程、Socket技术及委托技术的关系 Delegate   Sub DelegateHandler() Sub DelegateHandler(ByVal str As String)         '声明一个委托
多线程、Socket技术及委托技术的关系
Dim dh As DelegateHandler = New DelegateHandler(AddressOf 方法名)       'New 出一个委托并指定委托方法
多线程、Socket技术及委托技术的关系
Me.invoke(dh, New Object(){"传递的参数"})                   '调用invoke方法
多线程、Socket技术及委托技术的关系

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

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

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

  查阅关于VB的全部文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值