Laden...

[SslStream]: DataAvaialbe(von Networkstream) Ersatz

Erstellt von Frokuss vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.961 Views
F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren
[SslStream]: DataAvaialbe(von Networkstream) Ersatz

Guten morgen 😃

Ich habe mich gestern fast den ganzen tag mit SslStream herumgeschlagen, komme damit aber leider nicht so ganz zurechte.
Lieder musste ich feststellen, dass es hier im Gegensatz zu Networkstream auch nicht das Attribute DataAvaiable gibt. Meine Suchergebnisse haben auch alle mehr oder minder angedeutet, dass es kein passendes Äquivalent dazu gibt...

Daher meine Frage, gibt es etwas vergleichbares? Wenn ja, was wäre das? Und wenn nein, wie könnte man sich eine Methode basteln, was würde ich dazu brauchen? Würde das überhaupt sinnmachen?

Mein aktuelles vorgehen (Networkstream) ist, dass ich prüfe, ob Daten gesendet werden (DataAvailable), und wenn ja, ich das ganze dann erst anstoße (StreamReader.ReadLine)... Bei dem vorgehen bin ich mir nur nicht mehr sicher, ob dies sinnvoll ist...

Besten Gruß Frokuss

2.298 Beiträge seit 2010
vor 6 Jahren

Normalerweise prüft man das DataAvailable auf dem TcpClient bzw. dem UdpClient nicht auf dem Stream. Der dient nur dem Lesen und Schreiben der Daten.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

W
872 Beiträge seit 2005
vor 6 Jahren

Normalerweise hat man Lesen in einem eigenen langlaufendem Task.
Das Blockieren spielt da keine große Rolle und nimmt kaum Ressourcen.
Wenn Du mit vielen Daten arbeitest, bekommst Du sogar Probleme, wenn Du nicht schnell genug abnimmst (Stichwort TCP Requeue).

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren

Danke für eure Antworten 😃

Heißt das also, dass ich dass dann wie folgt machen kann:

NetworkStream ns = new Networkstream(socket);
SslStream sslStream = new SslStream(ns, false);
BinaryReader sr = null;

if(ns.DataAvaiable){
    sr = new BinaryReader(sslStream, Encoding.UTF8);
    //etc...
}

In dem Fall prüfe ich zwar den Networkstream, was somit inflames wiedersprechen sollte... Aber würde doch gehen, oder verstehe ich den Mechanismus falsch? Ich arbeite bei mir leider mir Sockets... dachte wäre klüger..

Gruß Frokuss

EDIT: Wegen der Blockade machen ich mir keine Sorgen, da ich das ganze nur für einen Chat verwende und ich dort eine Sendesperre (Clientseitig) von 1/3 Sekunden habe.

2.298 Beiträge seit 2010
vor 6 Jahren

Ich dachte jetzt eher an:


TcpClient client...

if(client.Available > 0)
   ...

oder diese Prüfung auf dem Socket selbst. TcpClient.Available representiert den Status von Socket.Availble. NetworkStream.DataAvailable schaut ebenfalls nur auf Socket.Available.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |