Hallo,
Ich habe vor ein paar Tagen angefangen auf C++ umzusteigen.
Aktuell versuche ich eines meiner alten Autoit Programme in C++ neu zu schreiben. Dabei muss ich mich unter anderem auf einer Seite einloggen, html Code bearbeiten usw.
Gibts dafür eine gute Lib oder ein Tutorial, wie ich das über TCP löse?
Mit cURL solltest du dir den Großteil der Arbeit sparen können.
Falls du die Seite grafisch darstellen willst würde ich dir QT oder wxwidgets empfehlen.
Wenn ich dabei auch möglichst viel lernen will, was sollte ich dann nutzen?
Ich will nur den html code als string zurück bekommen und eine login session aufrecht erhalten.
Wenn du was lernen willst und das Programm nur auf Windowsrechnern laufen muss, machs mit winsocks und schreib dir eine schöne, handliche Klasse, die du immer wieder verwenden kannst und die auf deine Bedürfnisse zugeschnitten ist.
Du könntest auch die WinInet Api nutzen, die übernimmt schon den ganzen Http-Protokoll-Scheiß, aber auch nicht mehr (vermutlich eher weniger), als Autoit übernimmt
Von daher solltest du mehr als mit Autoit lernen.
nicht ganz. die linux sockets verhalten sich wie FilePointer, wohingegen die winsock library auf HANDLES arbeitet. kleiner, aber gemeiner unterschied
zudem heißen einige der Funktionen leicht anders.
Also ich habs jetzt mit Winsock geschafft, bis auf Recv() :/
Ich bekomms einfach nicht hin bis zum Ende zu lesen und dann die Schleife zu breaken.
Recv darf ja nie nichts empfangen, da man sonst ewig an der Stelle hängt. Wie empfange ich nur den HtmlHeader, damit ich die restliche Länge des Files aus "Content-Length" lesen kann?
Es fehlt eventuell noch ein bisschen Fehlerbehandlung aber funktionieren tut es.
Der Header ist vom Content durch ein "\r\n\r\n" getrennt. Einfach nen break setzen, wenn du diese Bytefolge empfangen hast. Dann haste nur den Header. Aber wozu nur den Header empfangen, wenn man die ganze Seite haben kann?
Es fehlt eventuell noch ein bisschen Fehlerbehandlung aber funktionieren tut es.
Der Header ist vom Content durch ein "\r\n\r\n" getrennt. Einfach nen break setzen, wenn du diese Bytefolge empfangen hast. Dann haste nur den Header. Aber wozu nur den Header empfangen, wenn man die ganze Seite haben kann?
Doch, wenn die Verbindung geschlossen wurde, dann hast du die ganze Seite.
Er sagte doch schon, du sollst selbst aus der Schleife austreten, wenn du die Bytefolge erhalten hast! Das war noch kein fertiger Code.
Du müsstest nun in der Schleife prüfen, ob die Bytefolge in der Response ist und falls ja, trittst du aus der Schleife aus und hast den Header.
Aber warum austreten? Kannst doch einfach direkt in der Schleife die Size auslesen und dann dementsprechend weiter verfahren. Oder geht es dir gar nicht darum, zu wissen, wie viel du noch herunterladen musst?
@Infinite:
1. Ist doch seine Sache?! Wenn der den Rest nunmal nicht will, warum Kapazitäten verschwenden?
2. Wenn du zb. vorher die Größe der Seite haben willst, damit du weißt, wann du die Schleife abbrechen kannst, weil sie erreicht ist. Das ist hilfreich, wenn du dem Server nicht sagst, dass du nach Beenden des Ladevorgangs willst, dass die Verbindung geschlossen wird. Dann musst du ja irgendwie herausfinden, dass du die Seite schon geladen hast, recv gibt dann ja kein 0 zurück.
Das ist hilfreich, wenn du dem Server nicht sagst, dass du nach Beenden des Ladevorgangs willst, dass die Verbindung geschlossen wird.
Einfach im Header des gesendeten Pakets
Code:
Connection: close
statt
Code:
Connection: keep-alive
schreiben.
Der Server weiß, dass die Verbindung geschlossen werden soll und recv() gibt 0 zurück. Alles bestens
Mir fällt spontan kein Grund ein, aus dem man das vermeiden sollte...
Der Server weiß, dass die Verbindung geschlossen werden soll und recv() gibt 0 zurück. Alles bestens
Mir fällt spontan kein Grund ein, aus dem man das vermeiden sollte...
Und wenn du lesen könntest, wüsstest du, dass ich sagte, dass sein Vorhaben nötig ist, WENN MAN DAS GERADE NICHT WILL!
Ein Grund wäre die Performance. Bei großen Anfragen kostet es viel Zeit, die Verbindung jedes mal neu aufzubauen.
[Packets] Wie änder ich flyff packets? 07/16/2011 - Flyff Private Server - 19 Replies HeyHo,
Ich würde sehr gerne wissen wie man die Flyff Packets ändert...
ich denke mal Zahlen ändern werden nicht ausreichen oder?
WHICH PACKETS.... 04/24/2011 - Conquer Online 2 - 28 Replies mind if anyone tell me which specific packets are used to send and receive packing of dbs into dbscrolls cuz i cant seem to get wpepro record packets for me..
packets 11/19/2009 - Kal Online - 25 Replies Hey^^
i need some help.
i need to know how the packets of the in engine are crypt?
German:
ich muss wissen wie die packets der int engine verschlüsselt sind.
Help with Packets 05/03/2009 - CO2 Private Server - 7 Replies Ok here is a small problem when i use Expballs i cant get it to update ur level only if you dc i know its packet i tryed alot but they wont work
else if (ItemParts == "723700")
{
if (Level < 100 && EPotRate == false)
AddExp((ulong)(1295000 + Level * 100000), false);
else if (Level < 110 && EPotRate == false)
AddExp((ulong)(1395000 + Level * 160000), false);
else if (Level < 115 &&...
packets 06/11/2008 - Kal Online - 17 Replies Hey...
ich wollte mal fragen ob mir jemand erklären könnte womit man packets an server sendet...
hab mal bisschen rumgesnifft und wollte mal paar sachen testen... :)