vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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 - Ein- und Umsteiger
TCPListener stürzt beim Starten ab, wenn bereits mindestens 2 Clients warten 
Autor: Boris K.
Datum: 23.11.09 16:21

Hallo, liebe Forengemeinde!

Mittlerweile habe ich es geschafft, das Server und Clients ordentlich miteinander kommunizieren.
Nun habe ich allerdings das Problem, dass wenn ich den Server starte, während schon mindestens zwei Clients versuchen sich zu verbinden, Windows mit einer aussagelosen Fehlermeldung den Server beendet.
Einen Ausschnitt des relevanten Codes hier:

' MainForm
 
Public Class MainForm
    Private WithEvents myServer as New Server(nPort)
 
    [...]
 
    Private Sub StartServer()
        myServer.Start()
    End Sub
 
    [...]
End Class
' Server
 
Public Class Server
    Private tcpListener As TcpListener
    Private tcpClient As TcpClient
    Private nPort As Integer
 
    Public htUsers As New Hashtable(50) ' browsable by user
    Public htConnections As New Hashtable(50) ' browsable by connection
 
    Private thrListener As Thread
    Private ServerRunning As Boolean = False
 
    Sub New(ByVal Port As Integer)        
        nPort = Port
    End Sub
 
    Public Sub Start()
        tcpListener = New TcpListener(IPAddress.Any, nPort)
        tcpListener.Start()
        ServerRunning = True
        thrListener = New Thread(AddressOf KeepListening)
        thrListener.Start()
    End Sub
 
    Private Sub KeepListening()
        While ServerRunning
            tcpClient = tcpListener.AcceptTcpClient
            Dim newConnection As Connection = New Connection(tcpClient)
        End While
    End Sub
 
   [...]
End Class
 
 
' Connection
 
Class Connection
    Private Server As Server
    Private tcpClient As TcpClient
    Private thrSender As Thread
    Private srReceiver As StreamReader
    Private swSender As StreamWriter
    Private currentUser As String
    Private strResponse As String
 
    Sub New(ByVal tcpCon As TcpClient)
        tcpClient = tcpCon
 
        thrSender = New Thread(AddressOf AcceptClient)
        thrSender.Start()
    End Sub
 
    Public Sub CloseConnection()
        tcpClient.Close()
        srReceiver.Close()
        swSender.Close()
    End Sub
 
    Private Sub AcceptClient()
        srReceiver = New StreamReader(tcpClient.GetStream)
        swSender = New StreamWriter(tcpClient.GetStream)
 
        currentUser = Mid(CType(tcpClient.Client.RemoteEndPoint, _
          IPEndPoint).ToString, 1, _
                          InStr(CType(tcpClient.Client.RemoteEndPoint, _
                          IPEndPoint).ToString, _
                          ":") - 1) & ": " & srReceiver.ReadLine
 
        If Not currentUser = "" Then
            [...]
        Else
            CloseConnection()
        End If
 
        Try
            While True
                strResponse = srReceiver.ReadLine
                If strResponse Is Nothing Then
                    Server.RemoveUser(tcpClient)
                    Exit While
                Else
                    Select Case strResponse
                        [...]
                    End Select
                End If
            End While
        Catch ex As Exception
            [...]
        End Try
    End Sub
End Class
Gibt es da nun ein generelles Problem, das ich beachten sollte oder habe ich bei der Implementierung etwas unbeachtet gelassen?

Sollte es zu diesem Problem doch schon einen Thread geben, dann bitte ich dorthin zu verweisen. Die Suche brachte mir leider kein Ergebnis.

Grüße
Boris
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TCPListener stürzt beim Starten ab, wenn bereits mindestens ...1.085Boris K.23.11.09 16:21
Re: TCPListener stürzt beim Starten ab, wenn bereits mindest...521Boris K.23.11.09 18:16

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