WinHTTP - Port bei Client wechselt



  • Hallo, ich sitze schon den ganzen Tag über meinem Problem. Ich habe eine Funktion geschrieben, die eine Verbindung mit einem Server herstellt. Also WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpRecieveResponse, WinHttpReadData und WinHttpCloseHandle sind alle dabei.
    Ich habe auf einem Test-Server ein kleines PHP-Script erstellt, das immer die Variable i, die über die URL mitgeliefert wird, ausgibt (also "echo $_GET["i"];" ).

    Der entsprechende Teil des Programms sieht im Groben so aus:

    for( int i = 0; i < 1024; i++ )
    {
          while( ConnectServer( i ) ); 
    /* ConnectServer( ) verbindet sich mit dem Server (z.B. http://www.example.com/?i=42 ) 
    Bei einem Fehler gibt die Funktion einen Wert ungleich 0 zurück, sodass die Funktion solange mit dem Wert i wiederholt wird bis sie erfolgreich ist. */
    }
    

    In Wireshark sieht das dann so aus, dass sich das Programm am Anfang mit dem Server verbindet und eine Antwort bekommt. Danach versucht das Programm sich wieder mit dem Server zu verbinden, die Verbindung scheitert aber (Programm sendet FIN, ACK - komischerweise erst nachdem versucht wurde, eine neue Verbindung herzustellen). Es wird danach erfolgreich eine Verbindung auf dem nächsten Port hergestellt, die jedoch beim zweiten Mal auch wieder scheitert. Dieser Vorgang wiederholt sich, bis überhaupt kein Verbindungsversuch mehr aufgenommen wird (Bekommt ein Programm nur eine bestimmte Anzahl an Ports, die es verbrauchen darf? - es bleibt immer bei 39 stehen).

    Bei einem gewöhnlichen InternetBrowser ist das aber auch nicht so, also frage ich mich, was ich falsch mache. Der bisherige Code von mir entspricht so ziemlich dem aus der SDK-Dokumentation zu WinHttp.

    Ich wäre euch unglaublich dankbar, wenn ihr mir ein Beispiel geben könntet, bei dem das mit dieser Schleife funktioniert.

    MfG



  • Das Problem liegt vermutlich in deinem Code welchen wir hier nicht sehen. Das beschriebene Verhalten ist IMO Fall nicht normal. Ich habe zwar keine Erfahrung mit WinHttp, aber mit WinInet hatte ich nie solche Probleme.



  • Ich habe jetzt auf WinInet gewechselt. Mit den Funktionen InternetOpenUrl und InternetReadFile hat sich auch der Code wunderbar verkürzt, wenn auch die Zahl der verwendeten Handles scheinbar gestiegen ist, was sich verkraften lässt.

    Danke für die schnelle Antwort, hat mir _sehr_ geholfen.

    MfG



  • Gut für dich 🙂

    Nur eine Anmerkung (OK, zwei): WinInet ist das ältere Interface, also theoretisch müsste WinHttp auch das "bessere" Interface sein. Und: WinInet funktioniert nur wenn ein User eingeloggt ist, und ist damit NICHT für Services zu brauchen. Falls du ein Anwendungsprogramm/Tool/... programmierst ist das natürlich egal.


Anmelden zum Antworten