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

自定義Socket結構體

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

 

轉自http://blog.csdn.net/gxboy/archive/2008/05/06/2398876.aspx

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