Also ich habe mir einen kleinen TCP Server geschrieben..:)
Vielleicht kann ihn einer brauchen.
Server.vb
Spoiler anzeigen
VirtualClient.vb
Spoiler anzeigen
ClientDisconnectedEventArgs.vb
Spoiler anzeigen
ClientDataReceivedEventArgs.vb
Spoiler anzeigen
ClientConnectedEventArgs.vb
Viel Spaß damit (alles selbst geschrieben ;p)
Vielleicht kann ihn einer brauchen.
Server.vb
VB.NET-Quellcode
- Public Class Server(Of Client As VirtualClient)
- Private _BannedIPs As Net.IPAddress()
- Public ReadOnly Property BannedIPs As Net.IPAddress()
- Get
- Return Me._BannedIPs
- End Get
- End Property
- Public Sub AddBan(ByVal IPAddress As String)
- If Array.IndexOf(Me._BannedIPs, Net.IPAddress.Parse(IPAddress)) = -1 Then
- Array.Resize(Me._BannedIPs, Me._BannedIPs.Length + 1)
- Me._BannedIPs(Me._BannedIPs.Length - 1) = Net.IPAddress.Parse(IPAddress)
- End If
- End Sub
- Public Sub RemoveBan(ByVal IPAddress As String)
- If Array.IndexOf(Me._BannedIPs, Net.IPAddress.Parse(IPAddress)) = -1 Then
- Array.Resize(Me._BannedIPs, Me._BannedIPs.Length + 1)
- Me._BannedIPs(Me._BannedIPs.Length - 1) = Net.IPAddress.Parse(IPAddress)
- End If
- End Sub
- Public Sub ClearBans()
- Array.Resize(Me._BannedIPs, 0)
- End Sub
- Private _Clients As List(Of Client)
- Public ReadOnly Property Clients As Client()
- Get
- Return Me._Clients.ToArray()
- End Get
- End Property
- Private _Socket As Net.Sockets.Socket
- Public ReadOnly Property Socket As Net.Sockets.Socket
- Get
- Return Me._Socket
- End Get
- End Property
- Private _LocalEndPoint As Net.IPEndPoint
- Public ReadOnly Property LocalEndPoint As Net.IPEndPoint
- Get
- Return Me._LocalEndPoint
- End Get
- End Property
- Private _Backlog As Integer
- Public ReadOnly Property Backlog As Integer
- Get
- Return Me._Backlog
- End Get
- End Property
- Sub New(ByVal _Port As UShort, Optional ByVal _Backlog As Integer = 32)
- Me._LocalEndPoint = New Net.IPEndPoint(Net.IPAddress.Any, _Port)
- Me._Backlog = _Backlog
- Me._BannedIPs = New Net.IPAddress() {}
- Me._Clients = New List(Of Client)
- End Sub
- Public Sub Start()
- If Me._Socket Is Nothing Then
- Me._Socket = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
- Me._Socket.Bind(Me._LocalEndPoint)
- Me._Socket.Listen(Me._Backlog)
- Me._Socket.BeginAccept(AddressOf OnAccept, Me._Socket)
- End If
- End Sub
- Public Sub [Stop]()
- If Not Me._Socket Is Nothing Then
- Me._Socket.Shutdown(Net.Sockets.SocketShutdown.Both)
- Me._Socket.Close()
- End If
- End Sub
- Protected Sub OnAccept(ByVal ar As IAsyncResult)
- Dim myServer As Net.Sockets.Socket = ar.AsyncState
- Dim client As Net.Sockets.Socket = myServer.EndAccept(ar)
- If Array.IndexOf(Me._BannedIPs, DirectCast(client.RemoteEndPoint, Net.IPEndPoint).Address) <> -1 Then
- client.Disconnect(False) 'Client is banned
- RaiseEvent OnIpBlocked(Me, client.RemoteEndPoint)
- Else
- Dim myClient As Client = GetType(Client).GetConstructor(New System.Type() {GetType(Net.Sockets.Socket)}).Invoke(New Object() {client})
- Me._Clients.Add(myClient)
- RaiseEvent ClientAccepted(Me, New ClientConnectedEventArgs(Of Client)(myClient))
- AddHandler myClient.OnDisconnected, Sub(sender As VirtualClient, ErrorCode As Net.Sockets.SocketError)
- RaiseEvent ClientDisconnected(Me, New ClientDisconnectedEventArgs(Of Client)(sender, ErrorCode))
- Me._Clients.Remove(sender)
- End Sub
- AddHandler myClient.OnDataReceived, Sub(sender As VirtualClient, data As Byte())
- RaiseEvent DataReceived(Me, New ClientDataReceivedEventArgs(Of Client)(sender, data))
- End Sub
- myClient.BeginListen()
- End If
- myServer.BeginAccept(AddressOf OnAccept, myServer)
- End Sub
- Public Event OnIpBlocked(ByVal sender As Server(Of Client), ByVal e As Net.IPEndPoint)
- Public Event ClientAccepted(ByVal sender As Server(Of Client), ByVal e As ClientConnectedEventArgs(Of Client))
- Public Event ClientDisconnected(ByVal sender As Server(Of Client), ByVal e As ClientDisconnectedEventArgs(Of Client))
- Public Event DataReceived(ByVal sender As Server(Of Client), ByVal e As ClientDataReceivedEventArgs(Of Client))
- End Class
VirtualClient.vb
VB.NET-Quellcode
- Public Class VirtualClient
- Private _Socket As Net.Sockets.Socket
- Public ReadOnly Property Socket As Net.Sockets.Socket
- Get
- Return Me._Socket
- End Get
- End Property
- Private _ReceiveBuffer As Byte()
- Private _ReceiveError As Net.Sockets.SocketError
- Sub New(ByVal _Socket As Net.Sockets.Socket)
- Me._Socket = _Socket
- Me._ReceiveBuffer = New Byte(2047) {}
- End Sub
- Friend Sub BeginListen()
- If Me._Socket.Connected Then
- Me._Socket.BeginReceive(Me._ReceiveBuffer, 0, 2047, Net.Sockets.SocketFlags.None, Me._ReceiveError, AddressOf OnReceive, Me._Socket)
- End If
- End Sub
- Protected Sub OnReceive(ByVal ar As IAsyncResult)
- Dim myClient As Net.Sockets.Socket = ar.AsyncState
- If myClient.Connected() Then
- Dim Received As Integer = myClient.EndReceive(ar)
- If Received > 0 Then
- Dim myBytes As Byte() = New Byte(Received) {}
- Array.Copy(Me._ReceiveBuffer, myBytes, Received)
- Array.Clear(Me._ReceiveBuffer, 0, Me._ReceiveBuffer.Length)
- RaiseEvent OnDataReceived(Me, myBytes)
- Me._Socket.BeginReceive(Me._ReceiveBuffer, 0, 2047, Net.Sockets.SocketFlags.None, Me._ReceiveError, AddressOf OnReceive, myClient)
- Exit Sub
- End If
- End If
- RaiseEvent OnDisconnected(Me, Me._ReceiveError)
- End Sub
- Public Event OnDisconnected(ByVal sender As VirtualClient, ByVal ErrorCode As Net.Sockets.SocketError)
- Public Event OnDataReceived(ByVal sender As VirtualClient, ByVal data As Byte())
- End Class
ClientDisconnectedEventArgs.vb
VB.NET-Quellcode
- Public Class ClientDisconnectedEventArgs
- Inherits EventArgs
- Private _Client As VirtualClient
- Public ReadOnly Property Client As VirtualClient
- Get
- Return Me._Client
- End Get
- End Property
- Private _ErrorCode As Net.Sockets.SocketError
- Public ReadOnly Property ErrorCode As Net.Sockets.SocketError
- Get
- Return Me._ErrorCode
- End Get
- End Property
- Sub New(ByVal _Client As VirtualClient, ByVal _ErrorCode As Net.Sockets.SocketError)
- Me._Client = _Client
- Me._ErrorCode = _ErrorCode
- End Sub
- End Class
ClientDataReceivedEventArgs.vb
VB.NET-Quellcode
- Public Class ClientDataReceivedEventArgs
- Inherits EventArgs
- Private _Client As VirtualClient
- Public ReadOnly Property Client As VirtualClient
- Get
- Return Me._Client
- End Get
- End Property
- Private _Data As Byte()
- Public ReadOnly Property Data As Byte()
- Get
- Return Me._Data
- End Get
- End Property
- Sub New(ByVal _Client As VirtualClient, ByVal _Data As Byte())
- Me._Client = _Client
- Me._Data = _Data
- End Sub
- End Class
ClientConnectedEventArgs.vb
Viel Spaß damit (alles selbst geschrieben ;p)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BeefyX“ ()