sslStream und callback sobalt daten empfangen werden
-
Ich habe ein sslStream um mit meinem Server +ber SSL zu kommunizieren. Soweit funktioniert alles.
Nun möchte ich unerwartet Daten vom Server empfangen können. Sobalt der Client etwas empfäng soll eine Funktion aufgerufen werden.
Nun habe ich schon eine Idee, denke aber dieser Weg ist nicht im Sinne des Erfinders.
Ich rufe BeginRead auf. Sollte er wegen eines Timeouts einen leeren String an die Callback Funktion zurückgeben wird dieser String ignoriert.
Die Callback Funktion ruft nach Verarbeitung des Strings wieder BeginRead auf.Das sieht aber schon in der Theorie gefuscht aus. :*(
Was könnte ich denn anstelle von sslStream benutzen, dass ereignisse auslöst wenn Daten eingehen?
-
Mein Vorschlag wäre, den Stream von einem Worker-Thread aus
ständig abzufragen, ob neue Daten erhalten wurden, und wenn ja,
von dort das Ereignis auszulösen.Alex
-
Das sieht aber schon in der Theorie gefuscht aus. :*(
Bedeuted?
-
simon.gysi schrieb:
Das sieht aber schon in der Theorie gefuscht aus. :*(
Bedeuted?
Das bedeutet, dass ich glaube sslStream ist nicht dafür gedacht so benutzt zu werden und es eine anderen weg gibt ssl mit events zu benutzen.
Nun habe ich dennoch angefangen sslStream dafür zu benutzen.
Dazu setzte ich beim sslStream Objekt "ReadTimeout = System::Threading::Timeout::Infinite;"
Und starte anschließend BeginRead (Welches ja in einem Thread startet) um beim Empfangen eine Callback-Funktion aufzurufen. Von dort kann ich dann mittels mutex und invoke meinen Hauptthread Daten zukommen lassen. (Die Callback-Funktion wird auch im Thread ausgeführt wie BeginRead)Jedoch fehlt nun die möglichkeit einen Verbindungsabbruch mitzubekommen.
-
Das bedeutet, dass ich glaube sslStream ist nicht dafür gedacht so benutzt zu werden und es eine anderen weg gibt ssl mit events zu benutzen.
Der SslStream ist für synchrone sowie für asynchrone IO Operation gedacht.
Verbindungsabrüche solltest Du bei EndRead(..) mitkriegen.Ein anderer Weg wäre eben synchron.
Simon
-
Ja stimmt. Wenn die Verbindung abgebrochen wird gibt EndRead 0 Byte alse gelesen zurück.
Danke für die Hilfe!