vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Multilisten Sockets 
Autor: Fabian Stern
Datum: 19.10.05 13:06

Hallo,

kann mir das jemand so optimieren, dass ich keine 99% Auslastung habe? Und wenn es möglich ist ohne Erklärungen, einfach überarbeitet und dann danke ich euch 1000x.

Also hier ist der Source für die Konsolenanwendung - Port 1009 mit Telnet draufgehen oder so:

Imports System.Net.Sockets, System.Net, System.Text
Module modMain
    Dim mySockets As Hashtable
    Dim mySock(1000) As clsSocket
    Public Sub Main()
        Dim myListen As New TcpListener(IPAddress.Any, 1009)
        Dim myID As Int32 = 0
        myListen.Start()
        While True
            If myListen.Pending Then
                myID = FindSocket()
                mySock(myID) = New clsSocket(myListen.AcceptSocket)
                mySock(myID).myID = myID
                AddHandler mySock(myID).OnReceiveComplete, AddressOf _
                  OnReceiveComplete
                AddHandler mySock(myID).OnClose, AddressOf OnClose
                Console.WriteLine(myID & ": CONNECTED")
            End If
        End While
        Console.Read()
    End Sub
    Private Sub OnClose(ByVal mySocket As clsSocket)
        Console.WriteLine(mySocket.myID & ": --- CLOSED CONNECTION")
    End Sub
    Private Sub OnReceiveComplete(ByVal mReceiveLength As Int32, ByVal myBuffer( _
      ) As Byte, ByVal mySocket As clsSocket)
        If myBuffer Is Nothing Then Exit Sub
        Console.WriteLine(mySocket.myID & ": " & Encoding.ASCII.GetString( _
          myBuffer))
    End Sub
    Private Function FindSocket() As Int32
        For I As Int32 = 0 To mySock.GetUpperBound(0)
            If mySock(I) Is Nothing Then Return I
            If Not mySock(I).Used Then Return I
        Next
    End Function
End Module
Public Class clsSocket
#Region "Events"
    Public Event OnReceiveBegin()
    Public Event OnReceiveComplete(ByVal mReceiveLength As Int32, ByVal _
      myBuffer() As Byte, ByVal sender As clsSocket)
    Public Event OnSendBegin(ByVal mSendLength As Int32)
    Public Event OnSendComplete(ByVal mSentLength As Int32, ByVal sender As _
      Socket)
    Public Event OnClose(ByVal mySocket As clsSocket)
#End Region
 
#Region "Objekte"
    Public myID As Int32
    Public mySock As Socket
    Public myBytes() As [Byte]
    Dim WithEvents myTimer As New Timers.Timer(250)
    Dim mTotalSend As Int32
    Dim myThread As New Threading.AutoResetEvent(False)
#End Region
 
    'Instanzierung
    Public Sub New(ByVal mySocket As Socket)
        myTimer.Start()
        mySock = mySocket
    End Sub
    'In gebrauch?
    Public Function Used() As Boolean
        If mySock.Connected Then Return True
    End Function
    'Senden
    Public Sub Send(ByVal myBytes() As Byte)
        mTotalSend = myBytes.Length
        RaiseEvent OnSendBegin(myBytes.Length)
        mySock.BeginSend(myBytes, 0, myBytes.Length, SocketFlags.Partial, New _
          AsyncCallback(AddressOf _Send), mySock)
    End Sub
    'Sende ENDE
    Private Sub _Send(ByVal ar As IAsyncResult)
        Dim mResult As Int32 = mySock.EndSend(ar)
        If mResult = mTotalSend Then
            RaiseEvent OnSendComplete(mResult, mySock)
            mTotalSend = 0
        End If
    End Sub
    'Empfangen
    Public Sub Receive()
        myThread.Set()
        If mySock.Available = 0 Then Exit Sub
        RaiseEvent OnReceiveBegin()
        ReDim myBytes(mySock.Available - 1)
        mySock.BeginReceive(myBytes, 0, mySock.Available, SocketFlags.Partial, _
          New AsyncCallback(AddressOf _Receive), mySock)
    End Sub
    'Empfangen ENDE
    Public Sub _Receive(ByVal ar As IAsyncResult)
        Dim mResult As Int32 = mySock.EndReceive(ar)
        RaiseEvent OnReceiveComplete(mResult, myBytes, Me)
        Erase myBytes
        myThread.WaitOne()
        Receive()
    End Sub
 
    Private Sub myTimer_Elapsed(ByVal sender As Object, ByVal e As _
      System.Timers.ElapsedEventArgs) Handles myTimer.Elapsed
        If mySock.Connected = False Then
            RaiseEvent OnClose(Me)
            Exit Sub
        End If
        If mySock.Available > 0 Then
            Receive()
        End If
    End Sub
End Class

MfG.
Fabian Stern
-
info@smart-coding.com
http://www.smart-coding.com

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multilisten Sockets1.117Fabian Stern19.10.05 13:06
Re: Multilisten Sockets564Bingo19.10.05 17:29
Gelöst...564Bingo19.10.05 18:00
Re: Gelöst...569Fabian Stern21.10.05 00:58
Re: Gelöst...631Bingo21.10.05 10:30

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel