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

来源:互联网 发布:2017计算机二级c语言题 编辑:程序博客网 时间:2024/04/28 04:24
基于.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, 10241024)
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, 10241024)
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