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

介绍了一个基于.NET3.5的全异步Socket组件Socket35,支持TCP和UDP两种方式,采用事件模式通知,提供了丰富的功能如连接、接收、发送等,并附带了使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于.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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值