.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, 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章