Schon wieder WSA...



  • heyho!
    Eigentlich klappt jetzt alles so, wie es soll... Nun wollte ich eine Funktion schreiben mit der ich schnell eine Seite aufrufen kann, ohne gleich wieder viel am Quelltext zu ändern. Aber jetzt habe ich das problem das ich es einfach nicht gebacken kriege den gesamten Quelltext in einer Variable am Ende der Funktion zurückzugeben...
    ich habe jetzt diese Funktion:

    string WSARequest(string ip, string host, string seite = "", string post = "", string cookie_str = "")
    {
           SOCKET sock;
           if (WSAStart()!=0)
           {
                             cout << "WSA konnte nicht gestartet werden!" << endl;
                             system("pause");
                             return "-1";
           }
           sock = socket(AF_INET, SOCK_STREAM, 0);
           if (sock==INVALID_SOCKET)
           {
                    cout << "Socket konnte nicht erstellt werden!" << endl;     
                    system("pause");
                    return "-1";    
           }
           //================>Ip Adresse konvertieren
           char inet_address[30];
           strcpy(inet_address, ip.c_str());
           //==================>Ip Adresse konvertieren ENDE
           sockaddr_in addr;
           addr.sin_family = AF_INET;
           addr.sin_port = htons(80);
           addr.sin_addr.s_addr = inet_addr(inet_address);
           long rc = connect(sock, (SOCKADDR*)&addr, sizeof(sockaddr));
           if (rc==SOCKET_ERROR)
           {
                                cout << "SOCKET_ERROR: Error beim Verbinden mit " << ip << endl;
                                system("pause");
                                return "-1";
           }
           else
           {
               cout << "Verbindung wurde erfolgreich hergestellt!" << endl;
           }
           //=======================================================================>
           //=================>Verbunden mit Server<================================>
           //=======================================================================>
           string data;
           if (post=="") //wenn kein Post benutzt werden soll
           {
                data = WSAgetDataGet(ip, host, seite, cookie_str);         
           }
           else
           {
               data = WSAgetDataPost(ip, host, post, seite, cookie_str);
           }
           //===>Senden anfang
           char buffer[data.length()+1];
           strcpy(buffer, data.c_str());
           cout << data << endl;
           rc = send(sock, buffer, sizeof(buffer), 0);
           if (rc==SOCKET_ERROR)
           {
                                cout << "Daten konnten nicht versendet werden!" << endl;
                                system("pause");
                                return "-1";
           }
           //=============>SENDEN ENDE 
           //=======>EMPFANGEN ANFANG
           strcpy(buffer, "");
           ofstream f("C:/test.html"); 
           for(;;)
         {
          rc = recv(sock, buffer, sizeof(buffer), 0);
          if(rc == -1)
          {
          cout << "Fehler: " << WSAGetLastError() << '\n';
          break;
          }
    
          if(rc == 0)
          {
           break;
          }
          f.write(buffer, rc);
         } 
         string source;
         source.assign(buffer);
         return source;
    
    }
    

    Das der Quellcode in eine Datei geschrieben wird, steht da nur zur kontrolle.
    Jetzt würde ich gerne den gesamten Quelltext in einer Variable, die den datentyp std::string hat, zurückgeben...
    mfg
    @night@



  • f.write(buffer, rc);
    source.append(buffer, rc);
    


  • danke dir 👍


Anmelden zum Antworten