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

转载 2007年09月24日 08:53:00
这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、Socket技术及委托技术。于是在网上找了一些关于Socket技术的资料,加上学过的线程的一点知识,开始我的整合编程。深知自己一直都对VB没怎么兴趣的,感觉他不是真正的编程,VB是易学,易懂,易理解,想想还是花点时间学下,感觉有一天会有用的,于是一时心血来潮,凭着自己埋头苦干的边学东西边做软件,还好有其他编程软件的一点经验吧,没走偏了,一直都很想写个文章做个纪念,最令我深刻的、学到最有用的东西也就是多线程、Socket技术、委托技术。现在开始我的VB编程:
  第一步:什么是多线程?如果一个窗体里创建一个线程,他就是一个多线程,是两个线程的多线程,窗体显示及控件的管理本身就有一个线程控件,叫UI线程(自己理解应该是用户界面的线程吧!!呵呵),是主线程,而创建的线程则是子线程。那么什么是Socket呢?Socket就是套接字,通过Socket,有可以作为Server端的Socket,也有作为Client端的Socket,服务端开启一个子线程来监听客户端发来的所有信息,并可以发送回信息,实现数据双向通信。聊天软件很多都是基于Socket的编写出来的。好了,什么是委托技术呢?简单的说是就有一个人,他没有能力完成想要做的事,出钱委让给别人去完成,像某某公司经理要求你开发个竞赛软件,他本身没有能力去完成这样的事,所以出钱让你去完成。好了,明白了是什么后,接下来写下一些代码吧!!!!!

  第二步:多线程例子
  VB中多线程可以传值
Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 对象名(或类名).方法)
对象名(或是类名).属性 = 值 ''通过这样可以实现线程传参
.......
th.start()
  也可以返回值(通过委托技术实现),在做竞赛软件时,遇到一个问题,当在子线程里面去New 一个Form或是控件时,都会使窗体出现假死,于是在网上找了一些资料及查MSDN后才知道,原来子线程是没有能力去操控UI线程的控件,这里只能用委托技术。

Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 方法名1)
th.start()
Delegate Sub DelegateHandler(ByVal 参数 as String) ''声明一个委托
private Sub 方法名1()
dim dh as DelegateHandler = New DelegateHandler(AddressOf 方法名2)
me.invoke(dh, new Object()...{"value"})
End Sub

private Sub 方法名2(ByVal str as String)
''被委托给的方法 ,处理委托后的数据
End Sub
  第三步:Socket技术例子
  (1)服务器端
  Socket是基于线程而创建的,在UI线程下创建子线程,线程方法中用一个死循环在监听客户端的信息,第收到一信息后,委托给UI线程方法去处理。示例代码:

''声明一个线程
Dim t As System.Threading.Thread
t = New Thread(AddressOf WaitData)
t.Start()
Dim s As Socket
Public Sub WaitData()Sub WaitData()
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)
s.Bind(localEndPoint)
s.Listen(100)
Me.dealData(s)
End Sub

Private Sub DealData()Sub DealData(ByRef sock As Socket)
While (True)
Dim bytes As Byte() = New Byte(1024) {}
Dim ss As Socket = s.Accept()
i = ss.Receive(bytes)
Dim valstr As String = Encoding.Default.GetString(bytes, 0, i)
''处理接收到的数据
''见第二步线程与委托技术
''发送回数据
ss.Send(Encoding.Default.GetBytes("已收到!!Love you")) ''发回数据
End While
End Sub
  (2) 客户端
  只要求连接到服务器端,然后就Send数据,同时可以Receive数据。示例代码如下:
Try
Dim bytes As Byte() = New Byte(1024) {}
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)
s.Connect(localEndPoint)
s.Send(Encoding.Default.GetBytes("要发送的数据"))
s.Receive(bytes)
''处理接收到的数据
Catch ex As Exception
Finally
s.Close()
End Try
  第三步:委托技术
  其实就几步,声明委托、New一个委托并指定委托方法、调用invoke()方法,可以参考第一步。示例代码:
Delegate Sub DelegateHandler()Sub DelegateHandler(ByVal str As String) ''声明一个委托
Dim dh As DelegateHandler = New DelegateHandler(AddressOf 方法名) ''New 出一个委托并指定委托方法
Me.invoke(dh, New Object(){"传递的参数"}) ''调用invoke方法
Private Sub 方法名()Sub 方法名(ByVal str As String)
''处理委托的数据str
End Sub 

相关文章推荐

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

这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、Socket技术及委托技术。于是在网上找了一些关于Socket技术的资料,加上学过的线程的一点知识,开始我的...

多线程开发和Socket技术

一、进程和线程 进程:每个应用程序对应一个进程; 线程:一个进程至少包含一个线程,线程要和CPU进行交互。   多线程并发(可以理解为):"同一时间"执行多件事情,如程序一边执行,一边计数(计...

多线程下载技术论文

  • 2013年03月09日 10:50
  • 409KB
  • 下载

QEMU-KVM中的多线程压缩迁移技术

QEMU-KVM中的多线程压缩迁移技术   1.     技术原理   目前的迁移技术,都是通过向QEMUFILE中直接写入裸内存数据来达到传送虚拟机都目的端,这种情况下,发送的数据量大,从而会导致更...

深度剖析OpenGL ES中的多线程和多窗口渲染技术

移动设备中的CPU和GPU已经变得很强大,到处都是配备一个或多个高分辨率屏幕的设备,需要使用带有图形驱动器的复杂交互也日益增加。在这篇博客文章中,我将讨论多线程和多窗口渲染对开发人员来讲意味着什么,同...

多线程核心技术

  • 2017年07月25日 17:24
  • 5.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程、Socket技术及委托技术的关系
举报原因:
原因补充:

(最多只允许输入30个字)