.Net3.5 Socket事件通知封装类

2020年02月09日 阅读数:70
这篇文章主要向大家介绍.Net3.5 Socket事件通知封装类,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
基于.Net3.5编写,全异步操做。支持TCP、UDP两种方式,全事件模式通知。

Socket35.vb数组

 

' **********************************************************************
'
                适用于 .Net3.5版本
'
**********************************************************************


Imports  System.Net.Sockets
Imports  System.Net
Imports  System.Collections.Generic
Imports  System.Linq

Public   Class Socket35

#Region "自定义Socket结构体"
    
Public Class MySocket
        
Private MyWorkSocket As Socket
        
Private MyWorkID As Int32
        
Private MyWorkName As String

        
''' <summary>
        ''' 设置工做Socket
        ''' </summary>
        ''' <value>Scoket对象</value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property WorkSocket() As Socket
            
Get
                
Return MyWorkSocket
            
End Get
            
Set(ByVal value As Socket)
                MyWorkSocket 
= value
            
End Set
        
End Property


        
''' <summary>
        ''' Socket工做ID
        ''' </summary>
        ''' <value>Integer值</value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property WorkID() As Int32
            
Get
                
Return MyWorkID
            
End Get
            
Set(ByVal value As Int32)
                MyWorkID 
= value
            
End Set
        
End Property


        
''' <summary>
        ''' Socket工做名称
        ''' </summary>
        ''' <value>String值</value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property WorkName() As String
            
Get
                
Return MyWorkName
            
End Get
            
Set(ByVal value As String)
                MyWorkName 
= value
            
End Set
        
End Property

    
End Class

#End Region


Socket协义类型

    
Private SocketID As Int32
    
Private Server As Socket
    
Private ServerHas As New HashSet(Of MySocket)
    
Private MyReceiveBuff(), MySendBuff() As Byte
    
Public Delegate Sub EventHandler(ByRef Sender As MySocket, ByVal e As SocketAsyncEventArgs)

    
'-------------------------------------------------------------------------------------------------------------

    
Public Event OnAccept As EventHandler '客户端链接事件
    Public Event OnReceive As EventHandler '客户端传入数据事件
    Public Event OnDisconnected As EventHandler  '客户端断开事件
    Public Event OnSent As EventHandler  '数据发送完毕


    
'**********************************************************************
    '      Socket对象定义、接收数据、发送数据、外部事件引起
    '**********************************************************************

构造函数

链接服务器

接收缓冲区大小

发送缓冲区大小

绑定地址和端口

侦听数

开始侦听

客户端链接

客户端传入数据(TCP)

客户端传入数据(UDP)

发送数据

获得ServerHas数据信息

清除Socket对象

    
'**********************************************************************
    '                LinQ 查询 MySocket结构体
    '**********************************************************************

获得MySocket对象

释放对象

End Class




 

调用示例:服务器

TCP:异步

 

Dim  Server  As  Socket35
Server 
=   New  Socket35(Socket35.SocketType.TCP,  1024 1024 )
Server.Bind(
New  IPEndPoint(IPAddress.Any,  5614 ))
Server.Listen(
100 )

' Socket事件
AddHandler  server.OnAccept,  AddressOf  accept
AddHandler  server.OnReceive,  AddressOf  received
AddHandler  server.OnSent,  AddressOf  sent
AddHandler  server.OnDisconnected,  AddressOf  disconnect

' 开始监听
Server.Start()

' Socket链接进入
Private   Sub accept(ByRef Sender As Socket35.MySocket, ByVal e As SocketAsyncEventArgs)
    
    Sender.WorkName 
= Now.ToString
    Debug.Write(Sender.WorkID)

End Sub



' Socket接收入数
Private   Sub received(ByRef Sender As Socket35.MySocket, ByVal e As SocketAsyncEventArgs)

    
Dim Content As String
    
Dim SendBuff() As Byte

    Content 
= System.Text.Encoding.GetEncoding("gb2312").GetString(e.Buffer)
    server.Send(Sender.WorkSocket, SendBuff)

End Sub


' 查看当前Socket活动链接信息(二维数组)
Dim  SocketList(,)  As   String
SocketList 
=  Socket35.GetServerList()

 

UDP:函数

 

Dim  Server  As  Socket35
Server 
=   New  Socket35(Socket35.SocketType.UDP,  1024 1024 )
Server.Bind(
New  IPEndPoint(IPAddress.Any,  5614 ))

AddHandler  server.OnAccept,  AddressOf  accept
AddHandler  server.OnReceive,  AddressOf  received
AddHandler  server.OnSent,  AddressOf  sent
AddHandler  server.OnDisconnected,  AddressOf  disconnect
Server.Start()

' 接收UDP传来的数据
Private   Sub received(ByRef Sender As Socket35.MySocket, ByVal e As SocketAsyncEventArgs)

    
Dim Content As String
    
Dim SendBuff() As Byte

    Content 
= System.Text.Encoding.GetEncoding("gb2312").GetString(e.Buffer)

    Server.Send(Sender.WorkSocket, SendBuff)

End Sub