| |

VB.NET - Ein- und UmsteigerTCPListener 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 |  |
 | 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 |
  |
|
Neu! sevDTA 3.0 Pro 
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|