首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> VB.net >> 文章正文
多线程、Socket技术及委托技术的关系
来源:ChinaItLab 作者:佚名 时间:2007-9-21

 这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、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()
        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(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(ByVal str As String)         '声明一个委托
Dim dh As DelegateHandler = New DelegateHandler(AddressOf 方法名)       'New 出一个委托并指定委托方法
Me.invoke(dh, New Object(){"传递的参数"})                   '调用invoke方法

Private Sub 方法名(ByVal str As String)
        
'处理委托的数据str

End Sub

【责编:Luzi】
中国IT教育热线咨询
相关文章
几种VC++数据库开发技术的相对比较
利用C#实现标注式消息提示窗口
用C#创建COM对象
Visual C#多线程参数传递浅析
Visual C#多线程参数传递浅析
基于HOOK和MMF的Win密码渗透技术
Visual C++设计超强仿QQ自动伸缩窗口
Java SE 6.0实现高质量桌面集成开发
Visual Basic 9.0隐式类型的局部变量
JMX+J2SE5.0实现Web应用的安全管理
推荐文章

 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析03-13
·Visual C#多线程参数传递浅析03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·Visual Basic 9.0隐式类型的局部…09-30
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05