Daten senden



  • char *s;
    
            recv(sockfd2,s,1024, 0)) == -1);
    		{
            perror("recvfrom");
                exit(1);
    
    		printf("Received: %s",s);
    
    		closesocket(sockfd2);
    

    leider kommt immer error C2059: Syntaxfehler : ')'

    2. Frage

    // Senden
    
    char *s[10] = "ipconfig > C:\\";
    
    bytes; 
    
    // send s
    send(sock, s, strlen(s), 0); 
    strcpy(buf, "Wurde Gesendet: ");
    

    das senden sollte glaube ich stimmen...

    edit: sfds



  • Hamster schrieb:

    char *s;

    recv(sockfd2,s,1024, 0)) == -1);
    {
    perror("recvfrom");
    exit(1);

    printf("Received: %s",s);

    closesocket(sockfd2);

    leider kommt immer error C2059: Syntaxfehler : ')'

    2. Frage

    // Senden

    char *s[10] = "ipconfig > C:\";

    bytes;

    // send s
    send(sock, s, strlen(s), 0);
    strcpy(buf, "Wurde Gesendet: ");

    das senden sollte glaube ich stimmen...

    so leicht geht das nicht...wer wird für dich eine neu datei erstellen? glaubst das macht der socket selber?

    cu



  • Hamster schrieb:

    char *s;
    recv(sockfd2,s,1024, 0)) == -1);
    {
     perror("recvfrom");
     exit(1);
     printf("Received: %s",s);
     closesocket(sockfd2);
    

    leider kommt immer error C2059: Syntaxfehler : ')'

    Tja, wenn du da keine Syntax-Fehler siehst, dann ist dir wohl eh schon fast nicht mehr zu helfen :p
    - bei recv: 1 Klammer auf - 3 Klammern zu
    - darunter ein alleinstehendes {
    - Code nach exit, der so wohl nie erreicht werden würde
    Außerdem hast du für s keinen Speicher reserviert - alles in allem 😮



  • so erstmal danke socket. danke flenders für die schnelle antowrt
    so habe nun die dummen Fehler raus gemacht ( thanks ) aber flenders ich dachte das char das mit dem speicher reservieren übernimmt .. und socket was meinst du mit daten erstellen ??

    char *s;
    if (recv (sockfd2,s,1024, 0) == -1) {
    perror("recvfrom");

    printf("Received: %s",s);
    closesocket(sockfd2);

    }



  • char s[1024];

    von recv wird kein Speicher angelegt.



  • aaaa THANKS



  • char *s;
    //....
    

    Am Anfang des Scripts:

    char *s;
    s = new char[1024];
    

    ⚠ ACHTUNG: Bitte immer am Ende aufäumen: Nämlich mit delete[] wieder löschen, das geht so:

    delete[] s;
    

    Ähm, das sieht so aus als hättest du dir den leichten Teil eines Codeschnipsel rausgesucht und dann kopiert...

    Zu den Sockets:
    http://www.c-worker.ch/tuts.html



  • also so weit bin ich nun der server hat vom Clienten die Variable s bekommen

    nun möchte ich das er einen namen einer datei generiert so weit kein prob
    und s da rein schreibt und da ist das problem

    NOrmalerweise wehre das so

    string s;

    // Dateinamen generieren (in s2)
    s+=s2+".txt";
    system(s.c_str());

    nun zickt die exe rum um meint
    Der Befehl "dateiname.txt"ist entweder flasch geschrieben oder konnte nicht gefunden werden .

    heikle sache kann mir da jemand helfen



  • Versuche doch mal in der Konsole dateiname.txt einzugeben 😉 - was sollte das auch geben :p
    Irgendwie werde ich das Gefühl nicht los, dass dir massiv Grundlagen fehlen 😉



  • bei datei name ist ja schon was drin // habe es einfach mal ge nennant
    das wehre dann s2 also die generierte zahl ...... dann die ist dann 5 stellig
    und jo mir fehlen in c noch ein paar sachen ^^ ok zimmlich viel
    steige gerade von VB um bitte um verständnis



  • Dann solltest du aber nicht unbedingt gleich mit Sockets anfangen 🙄
    Mir ging es darum, dass nur ein Dateiname kein Befehl ist, den du in der Konsole eingeben kannst 😉

    Außerdem musst du dich entscheiden, ob du Ansi-C, C++ oder WinAPI verwenden willst. Wobei du dich sinnvoller Weise erstmal mit C bzw. C++ befassen solltest, damit du einigermaßen mit der Sprache vertraut wirst 🙂



  • jo werde alles nachhollen wollte nur noch das fertig machen knechte mich schon lange dran.... 🙂
    das ist ja das kommisch natürlich ist Dateiname kein Befehl soll es ja auch nicht ^^

    aber ich verstehe es nicht sagen wir mal er bekommt die Variable s als char

    nun soll er draus eine txt erstellen der name der txt wird in s2 generiert
    so weit so jut

    so würde es ausschauen
    also erstmal ohne s übermitlung
    würde das so ausehen

    cin.get();

    {
    string s = "ipconfig > C:\";
    // Dateinamen generieren (in s2)
    s+=s2+".txt";
    system(s.c_str());

    nun bekommt der s einfach char *s; kann ich nicht machen da zickt er wie könnte ich es ümwandel vielleicht so wie in Delphi stringtoblabla HElp



  • Ich verstehe nicht so ganz, worauf du hinaus willst 🙄



  • Client

    also zu erst wird hier s als Char defeniert dort werden die ergebnisse
    von ipconfig gepeichert danach wird s verendet

    char s[1000] = "ipconfig > C:\";

    // send s

    send(sock, s, strlen(s), 0);
    strcpy(buf, "Wurde Gesendet: ");

    // Der server
    so der bekommt dann s und

    char s[1000];

    if (recv (sockfd2,s,1024, 0) == -1) {
    perror("recvfrom");

    printf("Received: %s",s);

    closesocket(sockfd2);
    }

    //Generiert eine neue zahl und benutzt die als Datei namen für die .txt

    int argc;
    char *argv[1000] ;

    // Eine zahl wird generiert
    const int anzahlZeichen = 10;
    srand(time(NULL));
    string s2;

    for(int i=0; i < anzahlZeichen; i++) {
    s2 += static_cast<char>(rand() % 26 + 97); // nicht ändern
    }
    cout << "------------" << endl;
    cout << s2;

    // nun sollte er s in die s2 ( der generierte name ) einsetzen damit der inhalt
    von s in der neuen txt drin ist

    string *s;
    s+=s2+".txt";
    system(s.c_str());

    // Leider klapt es nicht habe schon daran gedacht es mit ofstream zu machen
    leider kann es dir include bei mir nicht finden
    und noch eine frage wenn ich s bekommen habe benutze ich printf("Received: %s",s);
    um das empfange auszugeben kommen ganz kommisch zeichen ...



  • Hamster schrieb:

    char s[1000];
    recv (sockfd2,s,1024, 0) ...

    Wieso 1024, wenn dein Buffer gar nicht so groß ist

    Hamster schrieb:

    // nun sollte er s in die s2 ( der generierte name ) einsetzen damit der inhalt
    von s in der neuen txt drin ist

    string *s;
    s+=s2+".txt";
    system(s.c_str());

    Deine Logik diesbezüglich verstehe ich immer noch nicht 🙄
    Wieso sollte er etwas in eine Datei schreiben, wenn du versuchst, den Dateinamen auszuführen :p

    Hamster schrieb:

    und noch eine frage wenn ich s bekommen habe benutze ich printf("Received: %s",s);
    um das empfange auszugeben kommen ganz kommisch zeichen ...

    Dann stehen diese komischen Zeichen offenbar dort drin 😉



  • ich weiß ich nerve aber ich versuche es weiter

    1. ok das mit dem Buffer war dumm

    2.Wieso den Dateinamen ausführen er soll den nur erstellen und dort s rein schreiben.
    wenn ich stat string *s; einfach string s = "ipconfig > C:\"; mache dann geht es aber dann speichert er dort die
    lokale ip .... aber der server soll meine ip kommen die in s drin ist und die in eine txt schreiben jetzt fragst du dich
    warum dann immer einen neuen namen generieren naja möchte nicht das die sich überschreiben

    3. Soll ich vielleicht den ganzen code vom Client und Server posten damit du mich verstechst 🙂



  • Hamster schrieb:

    Wieso den Dateinamen ausführen er soll den nur erstellen und dort s rein schreiben. wenn ich stat string *s; einfach string s = "ipconfig > C:\"; mache dann geht es aber dann speichert er dort die lokale ip .... aber der server soll meine ip kommen die in s drin ist und die in eine txt schreiben

    Das ist ja auch klar, denn mit > wird ja die Ausgabe von ipconfig in eine Datei umgeleitet 😉
    Du kannst also natürlich nicht einfach nur einen Dateinamen angeben - wenn du eine Datei anlegen und hineinschreiben willst kannst du z.B. CreateFile/WriteFile/CloseHandle verwenden 🙂



  • geht das auch über ofstream und seinen beiden freunden ?



  • sa sagen wir es mal so

    hamster = CreateFile("text.txt", GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);
    WriteFile(hamster,s, FileSize, &BytesWritten, NULL);

    nun hat er die neue datei text.txt erstellt aber es ist kein s drin gar nichts
    habe es auch mit

    char *s3;
    s3 = "Dummer text";
    WriteFile(hamster,s3, FileSize, &BytesWritten, NULL);

    steht auch nichts drin 😕 😮



  • Merkst Du denn gar nicht das es ohne Grundlagenwissen Deinerseits gar keinen Sinn macht, Dir etwas erklären zu wollen?

    Und sag jetzt nicht wieder "Grundlagenwissen hab ich", du beweist bereits mehrmals eindrucksvoll das es bei Dir mit den Grundlagen nicht allzugut aussieht...


Anmelden zum Antworten