[设为首页]
中国-东莞·教育导航
  主页 | 教育资讯 | 推荐课程 | 公开课 | 考试 | 资格认证 | 外语 | 硕士考研 | 自考成考 | IT培训 | 金融财会 | 名校 | 学习资料
  导航:首页 - 多线程、Socket技术及委托技术的关系一

多线程、Socket技术及委托技术的关系一
作者:城市学习网 来源:xue.net 更新日期:2007-12-18 阅读次数:
这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后*控前端显示给竞赛者,这就要用到多线程、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技术及委托技术的关系一
真实姓名
* 性 别
联系电话
* E-mail:
所在地区
咨询内容

      

相关文章:
·广域网基础知识 (2007-12-18)
·HTML特殊字符显示 (2007-12-18)

Copyright© 2014 www.dgedu.com.cn 东莞教育在线 版权所有
中国·东莞
粤ICP备06023013号