Willkommen bei Network & Security     remoteshell-security.com
Partnerseiten
login.php?sid=925b38559a956833a01465864385c95c profile.php?mode=register&sid=925b38559a956833a01465864385c95c faq.php?sid=925b38559a956833a01465864385c95c memberlist.php?sid=925b38559a956833a01465864385c95c search.php?sid=925b38559a956833a01465864385c95c index.php?sid=925b38559a956833a01465864385c95c

Foren-Übersicht » Programmierung » VB Chat
Neues Thema eröffnen  Neue Antwort erstellen Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
VB Chat
BeitragVerfasst am: 07.01.2007 13:28 Antworten mit Zitat
Kaito
Anmeldedatum: 12.01.2006
Beiträge: 80
Wohnort: /desktop/papierkorb




Hi ich lern seit einem halben jahr VB.Net und jetzt hab ich angefangen einen multiuserchat zu machen (einen normalen hab ich schon)

wenn mein feund den server startet geht er reibungslos.
aber wenn ich ihn starte(ports sind zurzeit 23 also telnet client und sind freigegeben) aba keiner kann connecten

Hier der derzeitige code:
Code:
Public Class frmMain


    Private Class Server
        Implements IDisposable

        Private thrMain As New Threading.Thread(AddressOf MainLoop)
        'los gehts!
        Sub New()
            'das ist der thresd den sich der server bastelt un darin macht er alles
            'so können mehrere server nebeneinander mit clients reden
            'weiter? wie wärs mit skype? probier mk
            thrMain.Start()

        End Sub

        Private tmrTimeout As New System.Threading.Timer(New Threading.TimerCallback(AddressOf Timeout), Nothing, Threading.Timeout.Infinite, Threading.Timeout.Infinite)

        Sub Timeout(ByVal state As Object)
            Try
                Sende("Timout.")
            Catch ex As Exception

            End Try
            Me.Dispose()
        End Sub


        'der stream muss nun zwischen den subs verfügbar sein:
        Dim objStream As Net.Sockets.NetworkStream

        Dim objListener As Net.Sockets.TcpListener
        Dim objClient As Net.Sockets.TcpClient
        '
        Sub MainLoop()
            Try
                objListener = New Net.Sockets.TcpListener(Net.IPAddress.Any, 23) 'telnet nimmt 23 wenn du nix anderes angibst weite
                objListener.Start() 'warte auf client

                Do
                    Threading.Thread.Sleep(100)
                    If Me.disposedValue Then Exit Sub
                Loop Until objListener.Pending


                'holen wir uns den anderen ran:
                objClient = objListener.AcceptTcpClient
                'und ziehen den stream raus über den wir mit ihm reden und er zu uns spricht:
                objStream = objClient.GetStream
                objListener.Stop()
                'so nun bergrüßen wir ihn:
                '(dies ist, damit er weiß, dess die connection steht)
                Sende("Die Verbindung wurde hergestellt!")
                RaiseEvent VerbindungHergestellt(Me, New VerbindungHergestelltEventArgs(objClient.Client.RemoteEndPoint))
                ResetTimer()
                'nun erwarten wir eingaben und lösen ein event aus wenn etwas empfangen wurde
                Dim data(0) As Byte 'so.
                Do
                    Dim blnEnter As Boolean = False 'gibt an ob ein enter kam
                    Dim stbData As New System.Text.StringBuilder
                    Do
                        If objStream.Read(data, 0, 1) > 0 Then 'wenn daten empfangen
                            ResetTimer()
                            If data(0) = 10 Then
                                blnEnter = True
                            ElseIf data(0) <> 13 Then '13 ignorieren'^^ich hab nich viel gesehen ich hhab irgendwie die komprimierung aus ich dtart VNC nohmal neukk
                                stbData.Append(System.Text.Encoding.GetEncoding("IBM850").GetChars(data))
                            End If
                        Else ' nichts empfangbar (fehlgeschlagen)
                            Threading.Thread.Sleep(100)
                        End If
                    Loop Until blnEnter
                    'nun enthält der stringbuilder das eingegebene

                    RaiseEvent DatenEmpfangen(Me, New DatenEmpfangenEventArgs(stbData.ToString, objClient.Client.RemoteEndPoint))
                Loop                                        '^-hier wird es  "befüllt"
                'verstehst? der server gibt den string an das e und gibt es beim auslösen des events mit, sodass beim behandeln des events ich drauf zugreifen aknn
            Catch ex As Exception
                Me.Dispose()
            End Try

        End Sub

        Public Event FehlerAufgetreten(ByVal sender As Object, ByVal e As FehlerAufgetretenEventArgs)
        Public Class FehlerAufgetretenEventArgs
            Inherits EventArgs

            Private exFehler As Exception
            Public Sub New(ByVal ex As Exception)
                Me.exFehler = ex
            End Sub

            Public ReadOnly Property Fehler() As Exception
                Get
                    Return exFehler
                End Get
            End Property

        End Class

        Private Sub ResetTimer()
            tmrTimeout.Change(TimeSpan.FromMinutes(1), TimeSpan.FromMilliseconds(-1))
        End Sub

        Public Event DatenEmpfangen(ByVal sender As Object, ByVal e As DatenEmpfangenEventArgs)
        Public Class DatenEmpfangenEventArgs 'hier ist es
            Inherits EventArgs

            Private strData As String
            Public Sub New(ByVal data As String, ByVal rEP As Net.EndPoint)
                strData = data
                remEP = rEP
            End Sub
            Public ReadOnly Property Daten() As String
                Get
                    Return strData
                End Get
            End Property

            Private remEP As Net.EndPoint

            Public ReadOnly Property RemoteEndpoint() As Net.EndPoint
                Get
                    Return remEP
                End Get
            End Property

        End Class

        Public Event VerbindungHergestellt(ByVal sender As Object, ByVal e As VerbindungHergestelltEventArgs)
        Public Class VerbindungHergestelltEventArgs 'hier ist es
            Inherits EventArgs

            Private remEP As Net.EndPoint

            Public Sub New(ByVal rEP As Net.EndPoint)
                remEP = rEP
            End Sub

            Public ReadOnly Property RemoteEndpoint() As Net.EndPoint
                Get
                    Return remEP
                End Get
            End Property

        End Class

        'da man auch von außen den server aufforden können soll (z.b. duch die form) was zu sagen mach ich diese funktion:
        Public Sub Sende(ByVal text As String)
            If objStream Is Nothing Then 'jemand könnte so blöd sein und senden wollen bevor die verbindung steht
                Throw New InvalidOperationException("(Senden nicht möglich: Keine Verbindung!")
            Else
                Dim data() As Byte = System.Text.Encoding.GetEncoding("IBM850").GetBytes(text) 'so.
                objStream.Write(data, 0, data.Length)
            End If
        End Sub

        Private disposedValue As Boolean = False        ' To detect redundant calls

        Public Event Disposed(ByVal sender As Object, ByVal e As ServerDisposedEventArgs)
        Public Class ServerDisposedEventArgs 'hier ist es
            Inherits EventArgs


            Public Sub New(ByVal rEP As Net.EndPoint)

                remEP = rEP
            End Sub
         
            Private remEP As Net.EndPoint

            Public ReadOnly Property RemoteEndpoint() As Net.EndPoint
                Get
                    Return remEP
                End Get
            End Property

        End Class

        ' IDisposable
        Protected Overridable Sub Dispose(ByVal disposing As Boolean)
            If Not Me.disposedValue Then
                If Not objListener Is Nothing Then
                    objListener.Stop()
                End If
                Try
                    If Not objClient Is Nothing Then
                        RaiseEvent Disposed(Me, New ServerDisposedEventArgs(objClient.Client.RemoteEndPoint))
                        objClient.Close()
                    Else
                        RaiseEvent Disposed(Me, New ServerDisposedEventArgs(Nothing))
                    End If
                Catch
                    Try
                        objClient.Close()
                    Catch
                    End Try
                    RaiseEvent Disposed(Me, New ServerDisposedEventArgs(Nothing))
                End Try
                thrMain.Abort()
            End If


            Me.disposedValue = True

        End Sub

#Region " IDisposable Support "
        ' This code added by Visual Basic to correctly implement the disposable pattern.
        Public Sub Dispose() Implements IDisposable.Dispose
            ' Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
#End Region

    End Class

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        NeuerServer()
    End Sub

    Private lstServers As New List(Of Server)

    Private Sub NeuerServer()
        Dim srvNeu As New Server
        lstServers.Add(srvNeu)

        AddHandler srvNeu.VerbindungHergestellt, AddressOf Server_VerbindungHergestellt
        AddHandler srvNeu.Disposed, AddressOf Server_Disposed
        AddHandler srvNeu.DatenEmpfangen, AddressOf Server_DatenEmpfangen
        AddHandler srvNeu.FehlerAufgetreten, AddressOf Server_FehlerAufgetreten

    End Sub

    Private Sub Server_VerbindungHergestellt(ByVal sender As Object, ByVal e As Server.VerbindungHergestelltEventArgs)
        Invoke(New TextAusgabeDelegate(AddressOf Ausgeben), "Verbindung hergestellt mit Client " & e.RemoteEndpoint.ToString)
        NeuerServer()
    End Sub

    Private Sub Server_Disposed(ByVal sender As Object, ByVal e As Server.ServerDisposedEventArgs)
        Me.lstServers.Remove(DirectCast(sender, frmMain.Server))
        If e.RemoteEndpoint Is Nothing Then
            Invoke(New TextAusgabeDelegate(AddressOf Ausgeben), "Server geschlossen")
        Else
            Invoke(New TextAusgabeDelegate(AddressOf Ausgeben), "Client getrennt: " & e.RemoteEndpoint.ToString)
        End If
    End Sub

    Private Sub Server_DatenEmpfangen(ByVal sender As Object, ByVal e As Server.DatenEmpfangenEventArgs)
        Invoke(New TextAusgabeDelegate(AddressOf Ausgeben), e.RemoteEndpoint.ToString & " sagt:" & e.Daten)
    End Sub

    Private Sub Server_FehlerAufgetreten(ByVal sender As Object, ByVal e As Server.FehlerAufgetretenEventArgs)
        Invoke(New TextAusgabeDelegate(AddressOf Ausgeben), "Fehler sufgetreten: " & e.Fehler.ToString)
    End Sub


    Delegate Sub TextAusgabeDelegate(ByVal text As String)
    Sub Ausgeben(ByVal text As String)
        txtAusgabe.Text &= text & vbCrLf
        txtAusgabe.Select(txtAusgabe.Text.Length, 0)
        txtAusgabe.ScrollToCaret()
    End Sub

    'jetzt müsste es schon gehen mit der form wird einer erstellt und wenn der was empfängt, dann wirds ausgespuckt

    Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Dim srv As Server
        Dim lstServersCopy As New List(Of Server)(lstServers)
        For Each srv In lstServersCopy
            srv.Dispose()
        Next

        Do
            Application.DoEvents()
        Loop Until lstServers.Count = 0

    End Sub

   
End Class



is lkan weiß ich aba vieleicht is da ein fehler hab schon alles ausprobiert dienst gestartet nich gestartet alle ports offen und so weiter

hoffe ihr könnt mir helfen
cya Kaito =)

_________________
Meine Seite:

www.sharerama.de

Sie ist noch im Aufbau
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden ICQ-Nummer
VB Chat
Foren-Übersicht » Programmierung
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Alle Zeiten sind GMT + 1 Stunde  
Seite 1 von 1  

  
  
 Neues Thema eröffnen  Neue Antwort erstellen  


Forensicherheit

Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin
Deutsche Übersetzung von phpBB.de


remoteshell-security.com | Partner | Boardregeln | Impressum