Mit WSA auf google.de zugreifen



  • danke, es funktioniert jetzt 👍
    2. Frage:
    Wie kann ich den Empfang so schreiben, dass er den gesamten Google-Quelltext empfängt???
    Im Moment empfängt das Programm ja nur die ersten 100 Zeichen...
    €dit:
    Wenn ich den Source in eine Datei schreiben will schreibt nicht alles... Ich benutze folgende Befehe:

    fstream file;
        file.open("hello.htm", ios::out);
        for (int i=0;i<1000;i++)
        {
            file << buffer_recv[i];
        }
        file <<endl;
        file.close();
    

    Warum schreibt er nicht alles???
    mfg
    @night@



  • Ich würde dir empfehlen eine HTTP 1.0-Abfrage zu machen und den Keep-Alive und Connection Header rauszunehmen. Dann schließt der Server die Verbindung, wenn er alles übertragen hat. Sprich du kannst solange recv aufrufen bis 0 zurückgegeben wird.

    Bei HTTP 1.1 müsste man einiges mehr beachten, z.B. Chunked transfer encoding.



  • Kann mir bitte jemand ein kleines Stück Code code... Ich hab keine Ahnung wie ich mit HTTP 1.0 darauf warte, dass er nur noch 0 schickt^^
    Hier mein Code:

    if (rc==SOCKET_ERROR)
        {
                             cout << "Fehler beim Senden der Daten!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Daten wurden erfolgreich gesendet!" << endl;
        }
        char buffer_recv[5000];
        recv(s, buffer_recv, 1000,0);
        char source[9000];
        strcpy(source, buffer_recv);
        while (buffer_recv[0]!=0)
        {
              recv(s, buffer_recv, 1,0);
              strcat(source, buffer_recv);
        }
    


  • Du musst nicht den Inhalt des Puffers auf 0'en überprüfen, sondern den Rückgabewert (return) von recv.



  • Das programm bricht jetzt wahrscheinlich das Empfangen ab, aber aus irgendeinem Gund schließt sich das Programm immer, wenn es fertig empfangen hat^^

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int WSAStart()
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0), &wsa);
    }
    
    int cstringlen(char array[])
    {
        int counter=0;
        while (array[counter]!=0)
        {
              counter++;
        }
        return counter;
    }
    
    void gebaus(char array[])
    {
         for (int i=0;array[i]!=0;i++)
         {
             cout << array[i];
         }
         cout << endl;
    }
    
    string getData()
    {
         int MAX_LENGTH = 8000;
         char crlf = 13;
         char buffer[MAX_LENGTH];
         string data;
         data = "GET / HTTP/1.0\n"
         "Host: localhost\n"
         "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n"
         "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n"
         "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n"
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n"
         "Keep-Alive: 300\n"
         "Connection: keep-alive\n\n";
         return data;
    }
    
    int login()
    {
        SOCKET s;
        if (WSAStart()!=0) 
        {
                         cout << "WSA konnte nicht gestartet werden!" << endl;
                         system("pause");
                         return -1;
        }
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s==INVALID_SOCKET)
        {
               cout << "Socket konnte nicht ertellt werden!" << endl;
               system("pause");
               return -1;
        }
    
        sockaddr_in addr;
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr("74.125.39.99");
        long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
        if (rc==SOCKET_ERROR)
        {
                             cout << "Verbindung konnte nicht hergestllet werden!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Verbindung wurde erfolgreich hergestllt!" << endl;
        }
        string data = getData();
        char buffer[5000];
        strcpy(buffer, data.c_str());
        rc = send(s, buffer, sizeof(buffer), 0); //senden
        if (rc==SOCKET_ERROR)
        {
                             cout << "Fehler beim Senden der Daten!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Daten wurden erfolgreich gesendet!" << endl;
        }
        char buffer_recv[5000];
        recv(s, buffer_recv, 1000,0);
        char source[9000];
        strcpy(source, buffer_recv);
        while (rc!=0)
        {
              rc = recv(s, buffer_recv, 1,0);
              strcat(source, buffer_recv);
        }
        cout << "Fertig!" << endl;
        system("pause");
        fstream file;
        file.open("hello.htm");
        for (unsigned int i=0;source[i]!=0;i++)
        {
        file << source[i];
    }
    file << endl;
    file.close();
    }
    
    void stradd(char array1[], char array2[])
    {
         int len1 = cstringlen(array1);
         int len2 = cstringlen(array2);
         char ergebnis[len1+len2+1];
         strcpy(ergebnis, array1);
         for (int i=0;array2[i]!=0;i++)
         {
             ergebnis[len1+i] = array2[i];
         }
         gebaus(ergebnis);
    }
    
    int main(int argc, char *argv[])
    {   
        login();
        system("pause");
    }
    

    mfg
    @night@



  • gitb es irgendwo nen Beispiel,wo man mit WSA auf eine Webseite zugreift???
    ich würd gern mal nen bisschen spicken 😉
    mfg
    @night@





  • Ich hab ja schon mal mit WSA nen Server und Client programmiert, aber ich hab ja speziell Probleme beim arbeiten mit Webseiten^^
    mfg
    @night@



  • // Fehlerbehandlung entfernt damit es kürzer ist ^^
    
    #include <iostream>
    #include <winsock2.h>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {  
        WSADATA wsa;
        WSAStartup(MAKEWORD(2,2), &wsa);
        SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    
        sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr("209.85.135.104");
        connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
    
        string request = "GET / HTTP/1.0\r\n"
                         "Host: www.google.de\r\n"
                         "\r\n";
    
        send(s, request.c_str(), request.length(), 0);
    
        char buffer[4096];
    
        for(;;)
        {
            int rc = recv(s, buffer, sizeof(buffer), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
    
            cout.write(buffer, rc);
        }
    }
    


  • Danke 👍 👍 👍
    es geht endlich 😃
    mfg
    @night@



  • ich hab jetzt folgendes Problem:
    Aus irgendeinem Grund gibt google mir immer anderen quelltext...
    manchmal funktionierts, dann wieder nicht, dann nur zum Teil 😞

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int WSAStart()
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0), &wsa);
    }
    
    int cstringlen(char array[])
    {
        int counter=0;
        while (array[counter]!=0)
        {
              counter++;
        }
        return counter;
    }
    
    void gebaus(char array[])
    {
         for (int i=0;array[i]!=0;i++)
         {
             cout << array[i];
         }
         cout << endl;
    }
    
    string getData()
    {
         int MAX_LENGTH = 8000;
         char crlf = 13;
         char buffer[MAX_LENGTH];
         string data;
         data = "GET / HTTP/1.0\n"
         "Host: www.google.de\n"
         "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n"
         "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n"
         "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n"
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n"
         "Keep-Alive: 300\n"
         "Connection: keep-alive\n\n";
         return data;
    }
    
    void WSArecv(SOCKET s, char buffer[])
    {
         int rc;
        for(;;)
        {
            rc = recv(s, buffer, sizeof(buffer), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
        } // ende for-schleife
    
    }
    
    int login()
    {
        SOCKET s;
        if (WSAStart()!=0) 
        {
                         cout << "WSA konnte nicht gestartet werden!" << endl;
                         system("pause");
                         return -1;
        }
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s==INVALID_SOCKET)
        {
               cout << "Socket konnte nicht ertellt werden!" << endl;
               system("pause");
               return -1;
        }
    
        sockaddr_in addr;
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr("74.125.77.104"); 
        long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
        if (rc==SOCKET_ERROR)
        {
                             cout << "Verbindung konnte nicht hergestllet werden!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Verbindung wurde erfolgreich hergestllt!" << endl;
        }
        string data = getData();
        char buffer[5000];
        strcpy(buffer, data.c_str());
        rc = send(s, buffer, sizeof(buffer), 0); //senden
        if (rc==SOCKET_ERROR)
        {
                             cout << "Fehler beim Senden der Daten!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Daten wurden erfolgreich gesendet!" << endl;
        }
        char buffer2[5000];
        //==================================>Empfangen...
        for(;;)
        {
            rc = recv(s, buffer2, sizeof(buffer2), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
        } // ende for-schleife
        string source = "";
        source.assign(buffer2);
        cout << source << endl;
    
    } 
    
    void stradd(char array1[], char array2[])
    {
         int len1 = cstringlen(array1);
         int len2 = cstringlen(array2);
         char ergebnis[len1+len2+1];
         strcpy(ergebnis, array1);
         for (int i=0;array2[i]!=0;i++)
         {
             ergebnis[len1+i] = array2[i];
         }
         gebaus(ergebnis);
    }
    
    int main(int argc, char *argv[])
    {   
        login();
        system("pause");
    }
    


  • Der Teil ist hier auf jeden Fall falsch:

    char buffer[5000];
    strcpy(buffer, data.c_str());
    rc = send(s, buffer, sizeof(buffer), 0); //senden
    

    Denk mal über das sizeof(buffer) nach.



  • void stradd(char array1[], char array2[])
    {
         int len1 = cstringlen(array1);
         int len2 = cstringlen(array2);
         char ergebnis[len1+len2+1];
         strcpy(ergebnis, array1);
         for (int i=0;array2[i]!=0;i++)
         {
             ergebnis[len1+i] = array2[i];
         }
         gebaus(ergebnis);
    }
    

    Uhhh....das akzeptiert der Compiler? Machs besser nicht.



  • Jo würd ich auch nicht machen, das geht nämlich nur beim g++. (Variable length array).

    Verzichte am besten ganz auf die C-Strings wenn du eh die String-Klasse aus C++ nutzt.



  • es funktioniert jetzt schon besser^^
    Allerdings kriege ich nicht den gesamten Google-Code...

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int WSAStart()
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0), &wsa);
    }
    
    int cstringlen(char array[])
    {
        int counter=0;
        while (array[counter]!=0)
        {
              counter++;
        }
        return counter;
    }
    
    void gebaus(char array[])
    {
         for (int i=0;array[i]!=0;i++)
         {
             cout << array[i];
         }
         cout << endl;
    }
    
    string getData()
    {
         int MAX_LENGTH = 8000;
         char crlf = 13;
         char buffer[MAX_LENGTH];
         string data;
         data = "GET / HTTP/1.0\n"
         "Host: www.google.de\n"
         "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n"
         "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n"
         "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n"
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n"
         "Keep-Alive: 300\n"
         "Connection: keep-alive\n\n";
         return data;
    }
    
    void WSArecv(SOCKET s, char buffer[])
    {
         int rc;
        for(;;)
        {
            rc = recv(s, buffer, sizeof(buffer), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
        } // ende for-schleife
    
    }
    
    int login()
    {
        SOCKET s;
        if (WSAStart()!=0) 
        {
                         cout << "WSA konnte nicht gestartet werden!" << endl;
                         system("pause");
                         return -1;
        }
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s==INVALID_SOCKET)
        {
               cout << "Socket konnte nicht ertellt werden!" << endl;
               system("pause");
               return -1;
        }
    
        sockaddr_in addr;
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr("74.125.77.104"); 62.146.187.145
        long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
        if (rc==SOCKET_ERROR)
        {
                             cout << "Verbindung konnte nicht hergestllet werden!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Verbindung wurde erfolgreich hergestllt!" << endl;
        }
        string data = getData();
        char buffer[10000];
        strcpy(buffer, data.c_str());
        int len = 
        rc = send(s, data.c_str(),data.length(), 0); //senden
        if (rc==SOCKET_ERROR)
        {
                             cout << "Fehler beim Senden der Daten!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Daten wurden erfolgreich gesendet!" << endl;
        }
        char buffer2[5000];
        //==================================>Empfangen...
        for(;;)
        {
            rc = recv(s, buffer2, sizeof(buffer2), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
        } // ende for-schleife
        gebaus(buffer2);
        fstream f;
        f.open("hello.htm");
        for (int i=0;buffer2[i]!=0;i++)
        {
            f << buffer2[i];
        }
        f << endl;
        f.close();
    
    } 
    
    int main(int argc, char *argv[])
    {   
        login();
        system("pause");
    }
    

    mfg
    @night@



  • ofstream f("C:/test.html");
    
    for(;;)
    {
        rc = recv(s, buffer2, sizeof(buffer2), 0);
    
        if(rc == -1)
        {
            cout << "Fehler: " << WSAGetLastError() << '\n';
            break;
        }
    
        if(rc == 0)
        {
           break;
        }
    
        f.write(buffer2, rc);
    }
    


  • ich liebe dich @spicker@ 😃 😃 😃
    es geht endlich 👍
    aber warum hat das ganze bei nem freund vonmir funktioniert 😕
    mfg
    @night@



  • heyho,
    bis jetzt funktioniert zwar nicht alles so wie es soll,aber das ist erstmal egal.
    Mein größtes Problem wär folgendes:
    Wenn ich ein 2. Mal versuche eine Verbindung herzustellen, gibt mir die Funktion connect() nur SOCKET_ERROR zurück, obwohl ich fünf Sekunden davor die Verbindung per closesocket abgebrochen habe.
    Gibt es hier eine Art spoiler, damit nicht immer der gesamte Platz auf der Seite eingenommen wird???

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <string>
    #include <fstream>
    #include <sstream>
    
    using namespace std;
    
    string StringBetween(const string& input, const string& left, const string& right)
    {
        size_t posLeft, posRight;
    
        posLeft = input.find(left);
        posRight = input.find(right);
    
        if (posLeft == string::npos || posRight == string::npos)
        {
            return ""; // Nicht gefunden
        }
    
        posLeft += left.length();
        posRight += right.length();
        string ergebnis1 = input.substr(posLeft, input.length() - right.length() - left.length());
        int formel = (input.find(right) - posLeft);
        string ergebnis2 = ergebnis1.substr(0, formel);
        return ergebnis2;
    }
    
    int WSAStart()
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0), &wsa);
    }
    
    int cstringlen(char array[])
    {
        int counter=0;
        while (array[counter]!=0)
        {
              counter++;
        }
        return counter;
    }
    
    void gebaus(char array[])
    {
         for (int i=0;array[i]!=0;i++)
         {
             cout << array[i];
         }
         cout << endl;
    }
    
    string getDataforfirst()
    {
         int MAX_LENGTH = 8000;
         char crlf = 13;
         char buffer[MAX_LENGTH];
         string data;
         data = "GET / HTTP/1.0\r\n"
         "Host: www.google.de\n"
         "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\r\n"
         "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
         "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
         "Keep-Alive: 300\r\n"
         "Connection: keep-alive\r\n\r\n";
         return data;
    }
    
    void WSArecv(SOCKET s, char buffer[])
    {
         int rc;
        for(;;)
        {
            rc = recv(s, buffer, sizeof(buffer), 0);
    
            if(rc == -1)
            {
                cout << "Fehler: " << WSAGetLastError() << '\n';
                break;
            }
    
            if(rc == 0)
            {
                break;
            }
        } // ende for-schleife
    
    }
    
    int firstcall()
    {
        SOCKET s;
        if (WSAStart()!=0) 
        {
                         cout << "WSA konnte nicht gestartet werden!" << endl;
                         system("pause");
                         return -1;
        }
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s==INVALID_SOCKET)
        {
               cout << "Socket konnte nicht ertellt werden!" << endl;
               system("pause");
               return -1;
        }
    
        sockaddr_in addr;
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr("74.125.77.104");
        long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
        if (rc==SOCKET_ERROR)
        {
                             cout << "Verbindung konnte nicht hergestllet werden!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Verbindung wurde erfolgreich hergestllt!" << endl;
        }
        string data = getDataforfirst();
        char buffer[10000];
        strcpy(buffer, data.c_str());
        rc = send(s, data.c_str(),data.length(), 0); //senden
        if (rc==SOCKET_ERROR)
        {
                             cout << "Fehler beim Senden der Daten!" << endl;
                             system("pause");
                             return -1;
        }
        else
        {
            cout << "Daten wurden erfolgreich gesendet!" << endl;
        }
        char buffer2[5000];
        //==================================>Empfangen...
        /*
        ofstream f("C:/test.html"); 
    for(;;)
    {
           gebaus(buffer2);
        rc = recv(s, buffer2, sizeof(buffer2), 0);
        if(rc == -1)
        {
            cout << "Fehler: " << WSAGetLastError() << '\n';
            break;
        }
    
        if(rc == 0)
        {
           break;
        }
        f.write(buffer2, rc);
    } 
    */
    string source;
    do
    {
           gebaus(buffer2);
        rc = recv(s, buffer2, sizeof(buffer2), 0);
        if(rc == -1)
        {
            cout << "Fehler: " << WSAGetLastError() << '\n';
            break;
        }
    
        if(rc == 0)
        {
           break;
        }
        source.assign(buffer2);
    
    } while (!source.find("</script>"));
    do
    {
    rc = recv(s, buffer2, sizeof(buffer2), 0);
    } while (!rc||rc==-1);
    closesocket(s);
    string img = StringBetween(source, "<img>", "</img>");
    cout << "imagename=" << img << endl;
    //==================================================================>>>> ssid erfolgreich abgezogen
    data = "GET / HTTP/1.0\r\n"
         "Host: www.google.de\n"
         "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\r\n"
         "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
         "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
         "Keep-Alive: 300\r\n"
         "Connection: keep-alive\r\n\r\n";
    Sleep(5000);
    rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr));
    if (rc==SOCKET_ERROR) 
    {
                          cout << "Fehler beim 2.Verbinden" << endl;
                          system("pause");
                          return -1;
    }
    rc = send(s, data.c_str(), data.length(), 0);
    if (rc==SOCKET_ERROR)
    {
                         cout << "Fehler beim Einloggen mir SSID" << endl;
                         system("pause");
                         return -1;
    }
    else
    {
        cout << "Daten wurden zum 2.Mal erfolgreich gesendet!" << endl;
    }
    char buffer3[8000];
       ofstream f("C:/test.html"); 
    for(;;)
    {
           gebaus(buffer3);
        rc = recv(s, buffer3, sizeof(buffer3), 0);
        if(rc == -1)
        {
            cout << "Fehler: " << WSAGetLastError() << '\n';
            break;
        }
    
        if(rc == 0)
        {
           break;
        }
        f.write(buffer3, rc);
    } 
    
    } 
    
    int main(int argc, char *argv[])
    {   
    firstcall();
    system("pause");
    }
    

    mfg
    @night@



  • char buffer2[5000];
    ...
    delete &buffer2;
    

    😮 😮



  • @eeker
    jaja. ahb keine ahnung wie ich auf den Mist gekommen bin 🙄
    mein plan war erstmal das Programm zum laufen zu bringen und anschliessend das programm nochmal sauber zu schreiben und alles aufzuräumen...
    mfg
    @night@


Anmelden zum Antworten