设为首页
给我留言
首页       关于蓬缘    克隆建站    模版建站    建站流程    建站疑虑    支付方式    网站推广    网站优化    建站学院    联系我们    
蓬缘网络技术工作室真心为您服务!霸州网站建设 + 霸州网页设计 + 霸州企业建站 + 霸州FLASH设计 + 霸州网站开发 + 平面设计,专业技术人员一对一服务让建站更加专业更加放心……二十四小时服务热线: 15932615201 13810319167。欢迎来电咨询……霸州网站建设工作室|霸州网站制作|霸州建站|霸州网站改版|霸州企业建站|霸州专业建站|蓬缘网络技术工作室 - 我要网站 - http://www.woyaowangzhan.com……霸州蓬缘网络技术工作室是专业的建站团队,提供专业的霸州建站服务:1、霸州专业网站建设(霸州网站设计)2、霸州网站推广(百度、Google、搜狐、阿里巴巴等)3、霸州网站优化(SEO、百度推广优化)4、霸州域名注册(.com/.cn/.net等)5、霸州虚拟主机(ASP、.net等)6、霸州政府建站7、霸州门户网站…… 现在时间是
建站学堂
 
多线程、Socket技术及委托技术的关系
[ 2008-10-28 8:24: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



 
   建站学堂
  ●  ASP编程技术
  ●  PHP编程技术
  ●  JSP编辑技术
  ●  ASP.NET编程技术
  ●  JAVA软件开发
  ●  C#软件开发
  ●  VB.NET软件开发
   网站推广与营销
  ● 网站备案的9个细节问题
  ● 网上注册一个域名的意义
  ● 网站从建设到运营的5点注意
  ● 8种提高网站ALEXA排名的方法
  ● 搜索引擎之间的4个区别
  ● 网站优化基本搜索引擎优化篇
  ● 点评A8音乐商业模式
  ● 5种不可取的网站推广方法
  ● SNS将成四大门户竞争的关键筹码
  ● 企业整站优化的一些技巧
  ● 马化腾创业三问
  ● 站长们每天都要做的工作
   网站优化与排名
  ● 快速提升访问量的方法
  ● 网站优化关键词工具,优化软件,SEO优化工具,SEO优化软件
  ● 总结四点分享我建站失败的经历
  ● 从达人圈到开心人人首谈SNS域名的选择与定位
  ● 良好心态是站长们成功的关键
  ● 浅谈做冷门站的一些心得体会
  ● 小游戏网站经营最重要的是站在用户的角度创新
  ● 关于网站首页打开速度之我见
  ● 谈一次域名解析出错带来的惨痛代价
  ● 我的地方论坛的建站之路经验总结
  ● 千人站长讲座第46期空姐网军哥谈特色社区运营
  ● 浅谈QQ类网站之站长的出路