多线程、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技术及委托技术的关系

作者:  xuanner  发布日期: 2007-9-15 02:21:01  Email:chenxuan5627@163.com----------------------------------...
  • xuanner
  • xuanner
  • 2007年09月15日 02:27
  • 904

委托和多线程的理解

原始线:Thread 用法: Thread thread=new Thread(new ThreadStart(执行方法));             thread.Priority = Thread...
  • a363096s
  • a363096s
  • 2015年12月24日 00:48
  • 1168

委托开发合同与合作开发合同的区别

委托开发 合作开发 责任不同 委托方支付研究开发经费和报酬,提供技术资料、原始数据等,研究开发方凭借自身的努力和具备的知识完成研究开发成果。 各方当事人...
  • u014683488
  • u014683488
  • 2016年03月25日 16:26
  • 1881

业务与技术的关系: 找到结合点才能创造价值

这是一个奇怪的问题。因为原本一开始,业务和技术本就应该是合在一起的。只是由于专业的分工,懂业务的人不是很了解技术,而搞专业的IT人员,又不是很了解业务。于是两帮人就有可能产生了重此轻彼的想法。关于业务...
  • xiammy
  • xiammy
  • 2007年07月22日 00:21
  • 7433

技术与需求的关系

作为技术人员,有时候会追求技术,在追求技术的过程中,导致项目出了很多问题,总结了几点,以免以后再犯相同的错误:     首先,在项目中不要使用不能完全掌握的技术。技术的更新迭代周期非常短,有...
  • xingfaming
  • xingfaming
  • 2017年01月20日 09:02
  • 415

socket长连接所用到的八大技术

我在做一个APP,连续做了7天终于搞定的一个异步socket通信的问题。由于公司机密不可能把代码贴出来。 不过socket相关的原形在我那篇socket通信中有介绍。 用到5大技术: 第一大技术是:多...
  • jia12216
  • jia12216
  • 2015年08月08日 16:19
  • 2267

电子邮件技术基础

1.1.1 电子邮件服务器  功能: 1.接收用户投递的邮件 2.将用户投递进来的邮件转发给目标邮件服务器 3.接收其他邮件服务器发来的邮件,并把邮件存储到其管理的用户邮箱中 4.为前来读取邮件的...
  • A0001AA
  • A0001AA
  • 2017年02月24日 13:53
  • 1481

读 《理清技术、业务和架构的关系》有感

今天读了架构漫谈九:理清技术、业务和架构的关系 有些感触,结合自己的一些经验谈下自己的想法。 这篇文章一个很重要的观点是,业务目标催生技术,而进一步演化产生架构。这种看法与自顶向下的设计模型是有区别...
  • ynwso
  • ynwso
  • 2016年05月12日 14:58
  • 533

c#多线程与委托

一:线程 在.net中提供了两种启动线程的方式,一种是不带参数的启动方式,另一种是带参数的启动的方式。 不带参数的启动方式  如果启动参数时无需其它额外的信息,可以使用ThreadStart来实...
  • wyw308
  • wyw308
  • 2012年03月06日 16:15
  • 7343

推荐系统:技术、评估及高效算法 第7章

Recommender Systems Handbook Chapter 7
  • u014034685
  • u014034685
  • 2016年12月07日 21:00
  • 555
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程、Socket技术及委托技术的关系
举报原因:
原因补充:

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