TinTin Geschrieben 24. April 2007 Geschrieben 24. April 2007 Servus, könnet mir, einem blutigen Socketanfänger, jemand in knappen Worten den Unterschied zwischen CSocket und CAsyncSocket erklären. Ich lesen schon eine ganze Weile über dieses Thema, habe aber bisher nichts gefunden, was mir sagen könnte "wenn du dieses machen willst, dann nimm diese oder jene Klasse." Ich habe in diesem Artikel gelesen, dass CSocket automatisch in einem eigenen Thread läuft. Trifft das auch auf CAsyncSocket zu. Ciao TinTin PS: Ach ja, und ich möchte euch bitten von Diskussionen Pro und Contra MFC Abstand zu nehmen. Zitieren
Klotzkopp Geschrieben 24. April 2007 Geschrieben 24. April 2007 Die Aufrufe von CAsyncSocket sind eben asynchron, d.h. sie blockieren den Aufrufer nicht. Das heißt aber auch, dass die Aufrufe meistens zurückkommen, bevor der Vorgang abgeschlossen ist. Wenn der Vorgang dann abgeschlossen ist - erfolgreich oder nicht - wird der entsprechende Callback des Sockets aufgerufen. Darum bringt CAsyncSocket selbst auch meist nichts. Üblicherweise leitet man eine Klasse davon ab, um die Callbacks überschreiben zu können. Was du wann benutzt, hängt von der Architektur deines Programm ab. Wenn du warten kannst (z.B. weil du schon in einem separaten Thread zu Gange bist, oder kein UI vorhanden ist), kannst du CSocket benutzen. Wenn dein Programm so aufgebaut ist, dass du Anfragen absetzt und einfach nur eine Benachrichtigung bekommen willst, wenn die Anfrage bearbeitet ist, und währenddessen weiterarbeitest, nimm CAsyncSocket. Zitieren
TinTin Geschrieben 24. April 2007 Autor Geschrieben 24. April 2007 Also, meine Problemeatik sieht folgendermassen aus: Ich habe einen (oder mehrere) Comserver im Netz die zu irgendeinem Zeitpunkt Daten über Ihre RS232 bekommen und über einen Port weiterschicken. Ich muss nun meine Anwendung mit diesem Port verbinden und warten das Daten kommen und diese dann verarbeiten. Meine Anwendung muss in diesem Fall als Client arbeiten, also muss ich eine Connect auf Addresse und Port machen und warten das Zeichen kommen. Schön wäre es auch, wenn ich über- prüfen konnte ob der Connect noch gültig ist - wenn der Server z.B. die Netzwerkverbindung verliert. TinTin Zitieren
Argbeil Geschrieben 15. Mai 2007 Geschrieben 15. Mai 2007 Dann nimm Async, sonst steht dein Programm solange bis Daten kommen. In der MSDN findest du Beispielcode. Sollte die Verbindung abreisen kommt (wenn ich mich richtig erinnere) die der Read-Callback mit einer Menge von 0 Byte Daten zurück. Ein weiterer Vorteil von Async ist, dass das schöner skaliert, also auf aktuellen Prozessoren auf zwei Cores verteilt werden kann. Nachteil ist schwerere Programmierung. Vielleicht baust du es erstmal synchron und steigst dann um. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.