Streams - 2 kleine Fragen

String

Erfahrenes Mitglied
Hallo zusammen,

ich bastle gerade an einem Multi-User Socket Server.
Aber ich habe da noch zwei grundlegende Fragen:

1) Lasse ich den Client-Server stream die ganze Zeit geöffnet oder öffne ich ihn "immer wieder", nur dann wenn ich Daten senden will?

2) Wie kann ich den Stream richtig schließen, wenn der Client sich einfach schließt ohne den Stream vorher zu beenden?

Zu 2):
Aktuell sieht der Client-Thread so aus:
Code:
  texte("Neuer Client gestartet")
        Dim weiter As Integer

        Do
            weiter = vclient.lesen()
            If weiter = 1 Then
                Exit Do
            End If
        Loop

        vclient.stream.Close()
        clients.Remove(vclient)
        texte("Client geschlossen")

DIe Funktion Client.lesen sieht so aus:
Code:
 Try
            If stream.CanRead Then
                Dim bytes(Form1.clientStream.ReceiveBufferSize) As Byte
                stream.Read(bytes, 0, CInt(Form1.clientStream.ReceiveBufferSize))
                Dim clientdata As String = Encoding.ASCII.GetString(bytes)

                Return 0
            Else
                Return 1
            End If

        Catch ex As Exception
            Return 1
        End Try

Schließt der Client das Programm ohne den Stream zu beenden, merkt der Server nicht, dass der Client nicht mehr erreichbar ist..
Kann mir da jemand einen Tipp geben, wie ich das richtig löse?

Beste Grüße und Dank im Voraus.

paD
 
Hi,

String hat gesagt.:
1) Lasse ich den Client-Server stream die ganze Zeit geöffnet oder öffne ich ihn "immer wieder", nur dann wenn ich Daten senden will?

Wie oft sendest du denn Daten? bzw. in welchem Abstand?
Das kommt immer auf die Situation an.

EDIT: Sehe grad du programmierst ein Multiplayer - Spiel. Wenn du das dafür brauchst rate ich dir die Streams offen zu lassen

String hat gesagt.:
2) Wie kann ich den Stream richtig schließen, wenn der Client sich einfach schließt ohne den Stream vorher zu beenden?
Normaler Weise wird dann nach einiger Zeit bei dem Server eine Exception geworfen. Also einfach Try-Catch drum.

Gruß
Erik
 
Zuletzt bearbeitet:
Frage zwischendrin.

Könnte der Server denn nicht in bestimmten Zeitabständen den Client eine Anfrage senden "ob er denn noch da ist"?

Wenn keine Antwort nch einer gewissen Zeit kommt, dann kann die Verbindung doch geschlossen werden.
 
Zurück