C: comment faire pour effacer de la mémoire tampon de lecture() sur une socket

Je suis en train de recevoir des données à partir d'un serveur, et il fonctionne très bien pour la première fois, mais comme read() conserve une boucle permet aussi de stocker les anciennes valeurs précédemment lu. Voici ce que j'ai jusqu'à présent.

        char receive[50];

        if((he = gethostbyname(servername)) == NULL ) {

            perror(strcat("Cannot find server named:", servername));
            exit(0);
        }

        he = gethostbyname("localhost");
        localIP = inet_ntoa(*(struct in_addr *)*he->h_addr_list);
        client_sock_desc = socket(AF_INET, SOCK_STREAM, 0);
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = inet_addr(localIP);
        server_addr.sin_port = htons(serverport);
        len = sizeof(server_addr);
        if(connect(client_sock_desc, (struct sockaddr *)&server_addr,len) == -1) {
            perror("Client failed to connect");
            exit(0);
        }

        strcpy(buf, "CLIENT/REQUEST\n");
        send(client_sock_desc, buf, strlen(buf), 0);
        //send actual function request

        //put a space before \n char to make it easier for the server
        for(i = 0; i < sizeof(wholeRequest); i++) {
            if(wholeRequest[i] == '\n') {
                wholeRequest[i] = ' ';
                wholeRequest[i+1] = '\n';
                break;
            }
        }

        while(read(client_sock_desc, receive, sizeof(receive)) > 0) {
            strcpy(receive, ""); //attempt to erase all old values
            printf(receive);
            fflush(stdout);
        }
        close(client_sock_desc);

Lorsque le serveur envoie les données une seule fois et ferme le socket, il fonctionne parfaitement. Mais puis-je avoir le client, ouvrez le support de nouveau, d'envoyer des données au serveur, et le serveur sera de nouveau envoyer des données au client et fermer le socket. Le client sera à nouveau essayer de lire les données que le serveur a envoyé, mais cette fois, il remplit recevez avec à la fois l'information et de la partie de l'ancienne information

Est-ce que votre serveur retourne null cordes? Je soupçonne réglage receive[0]='\0' serait un bon moyen pour effacer la chaîne. Comme il est, puisque vous "clair" receive avant de l'imprimer, comment n'avez-vous jamais aucune sortie? Serait-ce parce que vous avez besoin printf("%s", receive)? Je ne suis pas sûr de savoir comment printf réagit lorsque la chaîne de format est ""...
j' "clair" de la recevoir après j'ai l'impression, donc quand je fais la read() de nouveau, il faut espérer combler un vide receive avec seulement les valeurs actuelles qu'il a reçu du serveur
Non - vous "clair" de la recevoir dans la strcpy ligne, qui, dans le code ci-dessus, qui se passe AVANT le printf. Le fflush signifie simplement que tout ce qui printf allait à la sortie stdout va réellement à la console avant d'exécuter la ligne suivante. C'est vider la mémoire tampon", et vous le faites sur la SORTIE.

OriginalL'auteur user2158382 | 2013-04-21