neu anfänger



  • #include <stdio.h>      // Header für Input/Output
    #include <windows.h>    // Standart-Header für alle Windows-Programme
    #include <winsock2.h>   // Header für die Verwendung von Sockets
    #include <cmaths>
    
    DWORD WINAPI Thread(LPVOID);
    
    int main()
    {
        long  result;           // Enthält die Rückgabewerte der Funktionen
         WSADATA wsa;           // Initialisierungs-Daten
         SOCKET socketAccept;   // Socket, der Verbindungen annimt
         SOCKET socketConnect;  // Socket, der eine Verbindung enthält
         SOCKADDR_IN addrBind;  // Daten für das Binden an einen Port
    
         // Mit WSAStartup werden die Sockets initialisiert
         result = WSAStartup(MAKEWORD(2, 0), &wsa);
         if(result != 0)
         {
         printf("Fehler bei WSAStartup(): Code %d", result);
         return 0;
         }
         else
         {
             printf("WSAStartup() erfolgreich!");
         }
    
        // Initialisieren der Struktur SOCKADDR_IN
        memset(&addrBind, 0, sizeof(SOCKADDR_IN));
        addrBind.sin_port      = htons(12345);
        addrBind.sin_family       = AF_INET;
        addrBind.sin_addr.s_addr = ADDR_ANY;
        result=bind(socketAccept, (SOCKADDR*) &addrBind, sizeof(SOCKADDR_IN));
        if(result == SOCKET_ERROR)
        {
            printf("Fehler in bind(): Code %d", WSAGetLastError());
            return 0;
        }
        else
        {
            printf("bind() erfolgreich!");
        }
    
        // Initialisierung des socketAccept
        socketAccept = socket(AF_INET, SOCK_STREAM, 0);
    
        // socketAccept geht in den "listen-mode"
        result = listen(socketAccept, 10);
        if(result == SOCKET_ERROR)
        {
            printf("Fehler in listen(): Code %d", WSAGetLastError());
            return 0;
        }
        else
        {
           printf("listen() erfolgreich!");
        }
    
        while(true)
        {
            // accept() blockiert solang, bis eine Verbindung angenommen wurde
            socketConnect = accept(socketAccept, NULL, NULL);
    
            if(socketConnect == SOCKET_ERROR)
            {
                printf("Fehler in accept(): Code %dProgramm wird fortgesetzt",
                       WSAGetLastError());
                continue;
            }
    
            // Thread erstellen und weitermachen
            CreateThread(0, 0, Thread, (LPVOID) &socket, 0, 0);
        }
    
        return 0;
    }
    
    DWORD WINAPI Thread(LPVOID data)
    {
        char buf[256];            // Buffer für empfangene Daten
        SOCKET socket = (*)data;  // der Parameter wird derefernziert
    
        // Daten empfangen(blockiert)
        recv(socket, buf, 255, 0);
    
        // Daten senden
        send(socket, "Du mich auch", 13, 0);
    
        // Verbindung schliesen
        closesocket(socket);
    
        return 0;
    }
    

    In dieser Line liegt der error

    SOCKET socket = (*)data;
    

    Bin neuanfänger, also keine dummen fragen auslachen xD



  • Wo ist hier eine Frage?
    Welche Frage sollten wir denn dann auslachen, wenn es keine gibt...



  • Ich habe einen einzigen error wie im obigen post beschrieben und den möchte
    ich beheben...
    und ich hoffe ihr könnt mir helfen 🙂

    Jetzt könnt ihr lachen



  • Aus LPVOID schlussfolgere ich, dass data ein void-Pointer ist, d.h. du musst in Zeile 87 den void-Pointer nach SOCKET casten.

    PS: ne Compiler-Fehlermeldung ist immer ganz hilfreich...



  • SOCKET socket = *((SOCKET*)data);
    


  • Da ist aber noch ein ganz anderer Fehler!!!

    Mittels "&socket" übergibst du die Adresse der socket()-Funktion -)
    Du willst wohl eher '&socketConnect' übergeben...


Anmelden zum Antworten