VisualBasic TCP Client verbindet sich nicht mehr

1337

Lt. Junior Grade
Registriert
Aug. 2010
Beiträge
324
Hallo,
ich habe angefangen mich ein bisschen mit TCP auseinanderzusetzten.
Mithilfe dieses Tutorials habe ich jetzt einen Client und einen Server erstellt.
Mein Problem: Wenn der Server beendet wird und der Client läuft weiter, dann soll sich der Client wieder verbinden, wenn ich den Server wieder starte. Das ganze funktioniert bereits umgekehrt (wenn der Client beendet wird und der Server läuft weiter). Aber in der Gegenrichtung gibts Probleme. Der Client verbindet sich nur das erste Mal mit dem Server. Hier meine Source:

Serverseite:
Code:
        While client.Connected = False 'Wenn der Client nicht verbunden ist

            Try
                Server.Stop() 'sollte der Server noch laufen wird er beendet
            Catch ex As Exception
            End Try

            Server = New TcpListener(ipendpoint) 'Deklaration des Servers
            Server.Start() 

            client = Server.AcceptTcpClient 'Der Server nimmt den nächsten Client an

            stream = client.GetStream
            streamr = New StreamReader(stream)
            streamw = New StreamWriter(stream)  ' Streamdeklarationen

            If client.Connected = True Then
                listen() 'Diese Sub "hört zu" und endet, sobald der Client nicht mehr verbunden ist
            End If

        End While


Clientseite:
Code:
        While True 'Dauerschleife (läuft in extra Thread also kein Problem
            Try

                Client.Connect(IP, Port) 'Der Client versucht sich zu verbinden

                If Client.Connected = True Then 'wenn die Verbindung steht, werden die Streams deklariert
                    stream = Client.GetStream ' Stream wird auf Client verwiesen
                    streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
                    streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert

                    listen() '...und es wird zugehört. Auch diese Sub endet (habe ich extra geprüft), sobald keine Verbindung mehr steht

                Else
                End If

            Catch ex As Exception
            End Try
'Dann sollte eigentlich das Programm wieder nach oben springen, was es auch tut, allerdings verbindet es sich nicht mehr.

        End While

Weiß jemand woran das liegt?
 
Probier das mal:

If Client.Connected Then 'wenn die Verbindung steht, werden die Streams deklariert
stream = Client.GetStream ' Stream wird auf Client verwiesen
streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert

listen() '...und es wird zugehört. Auch diese Sub endet (habe ich extra geprüft), sobald keine Verbindung mehr steht

Else
Client.Connect(IP, Port) 'Der Client versucht sich zu verbinden
End If

So ganz versteh ich aber den Sinn nicht. Wieso listen auf Clientseite? Was passiert da?
 
Der Client soll auch Sachen empfangen, die der Server sendet, der Server empfängt das, was der Client sendet.

Dein Vorschlag hat leider nichts gebracht, da ja sowieso wieder versucht wird zu connecten wenn der Client nicht verbunden ist, das ganze ist ja in einer Endlosschleife drin.
 
Also, der Listener ist in aller Regel der Server.
Der Client wartet ja nicht, sonder ist der aktive Part. D.h. der Client sendet etwas und kann dann auch direkt eine Antwort erwarten. Insofern gibt es auf Clientseite keinen Listener. Der Server sendet nicht unmotiviert.

Schau dir mal die Klassen dazu im MSDN an. Vieleicht helfen dir die Samples weiter.

TcpListener

TcpClient
 
Dein Problem ist deine While / Try / Catch kombi.

Wenn du einemal die Exeacption ausgelöst hast, läuft die Schleife nur noch im Catch Teil weiter. Wenn du einen Counter im Try Teil installierst sieht du das auch, dass er nach dem ersten Connect Verlust nicht mehr weiter zählt.
 
Zurück
Oben