Problem beim Versenden von einem String per Client an Server



  • Serverklasse:

    Header:

    int Server::Handle_Client(const int sock)
    {
    	char buffer[BUF_SIZ];
    	int bytes;
        bytes = recv(sock, buffer, sizeof(buffer) - 1, 0);
    
        if (bytes == -1)
        {
            perror("recv() in get_banner() failed");
            return 1;
        }
    
        buffer[bytes] = '\0';
    
    cout << buffer << endl;
    	return 0;
    }
    

    Source:

    #include "Klasse.h"
    
    int main()
    {
    	Server a;
    	a.SocketStart();
    	return 0;
    }
    

    Client:

    void cut(char *s)
    {
        while (*s && (*s != '\r') && (*s != '\n'))
            s++;
        *s = '\0';
    }
    
    DWORD WINAPI reader(PVOID pParam)
    {
        char line[BUF_SIZ];
        SOCKET s;
    
        s = *(SOCKET*)pParam;
    
        while(fgets(line, sizeof(line) - 3, stdin))
        {
            cut(line);
            strcat(line, "\r\n");    /* passt sicher */
            if (send(s, line, strlen(line), 0) == -1)
                return 1;
        }
    
        return 0;
    }
    
    DWORD WINAPI writer(PVOID pParam)
    {
        char buffer[BUF_SIZ] = "gar nichts";
        int bytes;
        SOCKET s;
    
        s = *(SOCKET*)pParam;
    
        while((bytes = recv(s, buffer, sizeof(buffer), 0)) > 0)
            fwrite(buffer, 1, bytes, stdout);
    
        return 0;
    }
    

    Mein Problem ist, dass die Daten, die ich vom Client zum Server senden möchte, nicht ankommen. Die Funktion recv() gibt den Fehlercode -1 bzw. SOCKET_ERROR aus.

    recv() in get_banner() failed...

    Was mache ich falsch?



  • am besten du laesst den Fehlercode an den entsprechende Stellen durch WSAGetLastError() ausgeben.
    Da du hier ne TCP-Verbindung verwendest (:D behaupte ich einfach mal), hat denn alles davor funktioniert?
    Zum Beispiel das erstellen der Sockets, das connect, wenn es ein Client ist.
    Das bind und listen beim Server?



  • Ja, alles andere hat funktioniert, ich habe es auch immer geprüft.



  • Wie schon eben erwaent: WSAGetLastError()
    Die von dir genannte -1 gibt letztendlich nur aus, dass keine Bytes empfangen wurden. Ich erhoffen mir einen Fehlercode > 10000 😃



  • BasicMan01 schrieb:

    Wie schon eben erwaent: WSAGetLastError()
    Die von dir genannte -1 gibt letztendlich nur aus, dass keine Bytes empfangen wurden. Ich erhoffen mir einen Fehlercode > 10000 😃

    Fehler: 10057. Socket not connected.




Anmelden zum Antworten