.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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值