这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、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技术例子

  (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
    
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()方法,可以参考第一步。示例代码:

End Sub

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2021-12-25
  • 2021-12-25
  • 2021-12-25
  • 2021-10-16
猜你喜欢
  • 2022-12-23
  • 2022-02-14
  • 2021-05-31
  • 2021-10-08
  • 2021-12-25
  • 2022-12-23
  • 2021-07-24
相关资源
相似解决方案