client - serveur reception du message parfois erroné
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

client - serveur reception du message parfois erroné



  1. #1
    cosmoff

    client - serveur reception du message parfois erroné


    ------

    Bonjour,

    voila j'ai crée un client TCP sur mon smartphone qui transmet les entiers 1,2,3 jusqu'à 10000, et mon serveur recois les messages et les enregistre dans un fichier texte. Le serveur écrit chaque entier qu'il recoit sur le fichier texte puis fait un retour chariot. Ainsi, j'aurais donc un ficher texte de la forme :
    1
    2
    3
    ...
    Le problème est que parfois je me retrouve avec des retours chariots, par exemple si j'émet 555, le serveur écrit sur le fichier texte
    5
    55

    au lieu d'écrire tout simplement
    555

    j'ai aussi des fois des symboles bizarre qui apparaissent sur mon fichier texte.

    Avez vous une idée du probleme et comment je peux le résoudre. Ce qui m'étonne c'est qu'en général ca marche mais dans quelque cas j'ai parfois des retour chariot et des symboles bizarre.

    Merci d'avance pour votre aide

    -----
    Dernière modification par cosmoff ; 18/02/2018 à 15h12.

  2. #2
    Jack
    Modérateur

    Re : client - serveur reception du message parfois erroné

    Sûrement une erreur dans ton code

  3. #3
    cosmoff

    Re : client - serveur reception du message parfois erroné

    le probleme est que je ne vois pas l'erreur :
    Code:
    int main(int argc, char const *argv[])
    {
    	ofstream fichier("points.txt", ios::in | ios::trunc);
    	TcpServer SocketTcp(15000); // on active le serveur avec comme argument le numéro de port
    	string messageRecu;
    
    	bool valeurAscii = true;
    
    	if(fichier){
    
    		while(1){
    			messageRecu = SocketTcp.lire();
    			
    			valeurAscii = true;
    
    			for (int i = 0; i < messageRecu.size()-1; ++i) // on vérifie si les characteres du string sont un chiffre
    			{
    				if(((int)messageRecu[i] < 48) && ((int)messageRecu[i] > 57)){// alors ce n'est pas un chiffre du code ascii
    					valeurAscii = false;
    					break;
    				}
    
    			}
    
    
    			if(valeurAscii == true){
    				if(((int)messageRecu[messageRecu.size()-1] != 10) && ((int)messageRecu[messageRecu.size()-1] != 13))//il n'y pas de retour chariot
    					fichier << messageRecu << std::endl;
    				else fichier << messageRecu;
    			}
    				
    			
    		}
    			
    		fichier.close();
    	}
    et la fonction lire() est :
    Code:
    string TcpServer::lire(){
    	
    	char buffer[256] ="";
    	recv(csock, buffer, 256, 0);
    	string messageRecu = buffer;
    	return messageRecu;
    }
    arrives tu a voir une erreur ?

  4. #4
    Jack
    Modérateur

    Re : client - serveur reception du message parfois erroné

    C'est mieux avec du code

    Tu as essayé avec un debugger pour voir ce qui arrive réellement?
    Qui est à l'origine de la classe TcpServer?
    Il aurait peut-être été plus simple de gérer des fichiers binaires.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : client - serveur reception du message parfois erroné

    A la louche c’est la lecture par block de 256. A la fin du block on écrit dans le fichier avec un endl et il tombe parfois entre 2 chiffres. Ceci dit j’ai lu vite et je suis à un endroit avec peu de wifi donc je ne peux pas facilement creuser.
    Le conseil du debugger est celui à suivre.

  7. #6
    jacknicklaus

    Re : client - serveur reception du message parfois erroné

    j'ai un doute sur la méthode Tcpserver::lire. Le buffer est seulement initialisé à zéro sur son premier caractère, par une chaine vide. Aucune garantie pour le reste du buffer. Tout dépend alors du comportement de la fonction recv.
    Pour en avoir le coeur net, faire une initialisation complète à zéro de tout le buffer (memset).

    par ailleurs, pour confirmer un éventuel problème de gestion des fins de blocs, est-ce que les caractères bizarres n'arriveraient pas tous les 256 octets, par hasard ?
    There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy.

Discussions similaires

  1. Client/Serveur Visual Studio
    Par simo176 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 09/03/2015, 11h25
  2. Echange client-serveur : fonctionnement
    Par invitef5ef512f dans le forum Internet - Réseau - Sécurité générale
    Réponses: 16
    Dernier message: 22/09/2011, 12h17
  3. client - serveur sous builder
    Par LTHOMAS dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 04/06/2008, 15h41
  4. Client/serveur
    Par tariq_qui dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 30/01/2007, 19h11
  5. Architecture Client/Serveur
    Par inviteda647c54 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 22/04/2004, 13h18