winsock2 ...



  • Mhm, ich habe Deinen Quelltext 1 zu 1 übernommen, kompiliert und die exe ausgeführt. Der Client gibt einwandfrei aus:

    Winsock gestartet!

    und beendet sich dann ...
    Ich habe keinen Server laufen.
    Sieht also gut aus!



  • Ich hab mit Sleep()-Cmds jetzt festgemacht worans liegt ... Und der Client startet bei Mir Winsock definitiv nicht (Ohne Error-Message)... Der Server
    aber schon ..?!

    Das ganze sieht jetzt so aus:

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    using namespace std;
    
    int startWinsock()
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    
    int main()
    {
        char buf[6];
        long rc;
        SOCKET s;
        SOCKADDR_IN addr;
        printf("starting winsock soon");
        Sleep(10000);
        rc=startWinsock();
        if(rc!=0)
        {
            printf("Fehler: startWinsock, fehler code: %d\n",rc);
            return 1;
        }
        else
        {
            printf("Winsock gestartet!\n");
            return 0;
        }
        printf("winsock started");
        Sleep(10000);
    

    Direkt nach "Starting winsock soon" und dem Sleep verreckt er .. Ohne weitere Meldung... 😞 Woran kann das liegen??



  • Lone schrieb:

    und viertens: Warum bitte 8? :o Für mich sind Success 7 Zeichen.
    Und wenn der server statt Success -> Succes ausgibt ... ist das für Mich kein ernsthaftes Problem ... :o

    rofl



  • Hat sich erledigt .... 'return 0' Nur am Programmende :p.
    Danke an Alle!



  • Und zu den ganzen Leuten Die wohl besonders viel Wert darauf legen Anonym sinnlose Kommentare wie "ROFL" von sich zu geben -> Get a RL.



  • lern erstmal sepples bevor du mit irgendwelchen netzwerk lamereien anfängst, du pufferüberläufer.



  • Ich schreibe seit 2 Tagen in C++ ... Ich hab sowas vorher in Perl gemacht ...
    Wenn man kA hat einfach fresse halten, ok?
    Du musst Mir nicht erzählen was Ich lernen soll .. Das such Ich Mir ganz alleine aus danke ;).
    Da dus nichma schaffst in dem Code den Fehler zu sehen und nichts als unnütze Kommentare abgibst zeigt Wie profi der Arrogante Egozentriker wirlklich ist was?
    Du brauchst Dir nicht Die Mühe machen zu Antworten ... Ich besuche dieses Forum sicher nichmehr. Kannst derweil ma überlegen WER der Noob ist Oo.



  • Lone schrieb:

    Da dus nichma schaffst in dem Code den Fehler zu sehen

    Mhm, naja, Du hast offensichtlich Deinen Client nicht aus der Konsole heraus gestartet, sonst hättest Du von Anfang an alle printf - Ausgaben gesehen.
    Wenn Du natürlich einfach nur auf die Datei doppelklickst, dann schließt sich das Konsolenfenster nach Programmende sofort wieder, das ist der Grund, warum Du nicht bemerkt hast, daß Winsock sehr wohl gestartet wird.
    Daß das Programm danach wegen der return - Anweisung beendet wird, ist völlig klar, aber Du hast behauptet, es würde gar keine Ausgabe erzeugt --> das war eine falsche Information, die es nicht leicht gemacht hat, herauszufinden, daß Dein Start Winsock ja doch funktioniert.



  • Ich habe um eine Lösung gebeten nicht um Dumme Leute Die Mich zuflamen und dumme Kommentare abgeben ... Da hier nur das zweitere der Fall war ... C-Ya ...
    sowas hab Ich nicht nötig. Hättet Mir ja direkt eine solche Antwort geben können ... Nein das musste Ich selbst machen ... bei euch kommen nur ROFL's raus.
    Also erzähl nich son schwachfug und überleg wozu so ein Forum gut ist.
    Dieses hier hat auf jedenfall seinen Zweck verfehlt -> C-Ya



  • Der ging nich an Dich ... Aber Aufgrund dieser Anonym-Poster weiß Ich nich mit wem Ichs zutun hab .. sry 😉



  • Ich fühl mich auch nicht angesprochen.
    Aber ein Tip für die Zukunft:
    Starte Konsolenprogramme aus der Konsole, dann verpasst Du auch die Ausgaben nicht. Höchstwahrscheinlich hättest Du in dem Fall selbst schnell gemerkt, daß die return - Anweisung Dein Programm beendet, mit Sicherheit hättest Du aber gesehen, daß vorher noch Winsock gestartet wird.



  • Lone denkst du, uns würde es in irgendeiner Form interessieren ob du dieses Forum besuchst oder nicht? 😃 😃
    Leute die nicht mal wissen, dass jeder string wie "Success" noch ein abschließendes 0 Zeichen hat, brauchen wir sowieso nicht 👎
    pwned



  • ha ha ha schrieb:

    Leute die nicht mal wissen, dass jeder string wie "Success" noch ein abschließendes 0 Zeichen hat, brauchen wir sowieso nicht

    Bist Du schon mal auf den Gedanken gekommen, daß der Sinn dieses Forums darin besteht, Leuten zu helfen, die NICHT alles wissen?



  • A: Les genau dann siehst Du das der Server es dranhängt ...
    B: Hab Ich nie behauptet das es euch interessiert ...
    C: Halt Deine Dumme Fresse Du Opfer



  • Lone schrieb:

    A: Les genau dann siehst Du das der Server es dranhängt ...

    Im Client gibt es aber ein strcpy, in dem "Success" nach buf kopiert wird. Dieser Puffer buf muss groß genug sein, um "Success" UND das abschliessende Nullbyte aufzunehmen, sonst bekommst Du schon Probleme im Client, BEVOR überhaupt irgendwas an den Server gesendet wird.



  • Danke :). In Perl war das viel einfacher ..
    Socket erstellen .. Wie ein File behandeln ... ^^



  • wenn rc(Rückgabewert) 0 zurückgibt ist Die Verbindung weg, oder?
    Ansonsten wäre es ja SOCKET_ERROR, oder nicht?



  • Lone schrieb:

    wenn rc(Rückgabewert) 0 zurückgibt ist Die Verbindung weg, oder?
    Ansonsten wäre es ja SOCKET_ERROR, oder nicht?

    Sowohl 0 als auch SOCKET_ERROR signalisieren einen Fehler.

    rc = recv...
    
    if (rc == 0 || rc == SOCKET_ERROR)
    {
      // Verbindung weg
    }
    else
    {
      // Etwas empfangen
    }
    

    Ich kann dir folgendes ans Herz legen:
    http://c-worker.ch/tuts.php

    Dort findest du funktionsfähige Beispiele.



  • Return Values

    If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.



  • Was willst du mit deinem Server überhaupt erreichen? Nur so als Spaß-Übung oder was ernsthaftes?
    In beiden Fällen empfehle ich dir erst mal das hier, insbesondere erhälst du eine Einführung in select und fd_sets um Multiserver zu bauen (deine Methode verkraftet nur 1 Client gleichzeitig)
    Wenn es was ernstes ist, lern erst GRÜNDLICH C (besser C++), denn nichts ist schlimmer (d.h. gefährlicher) als "Noobs" in der Netzwerk-Programmierung. Sachen wie Buffer-Overflows sind z.B. Grund für den "Erfolg" des IE (Internet Exploiter).

    Sieh es jetzt als keine Beleidigung, sondern als gut gemeinten Rat an, denn du bist scheinbar recht leicht von ein paar Forentrollen reizbar. 🙂


Anmelden zum Antworten