IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

C++/Problème envoyer recevoir des octets dans un tableau


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut C++/Problème envoyer recevoir des octets dans un tableau
    Bonjour a tous.

    Je suis une grande débutante en c++ et je me heurte a un problème.

    Voila, je dois faire un programme de socket.
    J'utilise pour cela une source et header que j'ai nommé socket et que je rattache au main.
    Le problème est que dans ma source socket.cpp j'ai le bout de code pour pouvoir recevoir des octets que je met dans un tableau.
    Déjà je ne suis pas du tout sure que ce que j'ai mit fonctionne: le code:
    Code C/C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    std::string Socket::ReceiveLineServer()
    {
    	string ret;
    	int VALEUR=2048;
    	const char* buffer[VALEUR];
     
    	char r;
    	for (int i=0; i<VALEUR;i++)
    	{
    		switch (recv(SocketServerCon, &r, 1, 0))
    		{
    			case 0: // not connected anymore but last line sent might not end in \n so return ret anyway.
    				return ret;
    			case -1:
    				return "";
    				throw Error(7,"Error in the receive line Server function",2);
    			default:
    			{
    				buffer[i] = r;
    				if (r == '\n')
    				return buffer[VALEUR];
    			}
    		}
    	}
    }


    J'ai utiliser un char ne sachant pas quoi utiliser d'autre pour mon tableau contenant les octets. Mais j'ai eu une erreur qui m'a dit qu'il fallait que je mette const* char au lieu de char.

    Okay. Le problème c'est que j'aimerais faire un return avec ce tableaux et pouvoir le réutiliser dan le main pour le renvoyé vers un autre socket.

    Mon programme est en faite une sorte de passerelle qui prend les données d'un côté et les revois de l'autre.

    Aider moi s'il vous plait, j'ai chercher sur internet des réponses mais je ne comprend pas grand chose et ce que j'ai essayer n'a pas fonctionner.

    Merci.

    Bonne journée.

  2. #2
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Hello,
    Pourquoi ne pas directement utilisé un string comme buffer? il se comporte exactement de la même manière que ton tableau statique de const char* et tu peux convertir son contenu vers un const char* en utilisant la fonction membre c_str().

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    C'est une idée que je vais de ce pas essayer.

    Est ce que le returnn fonctionnera sur un string?

    Merci beaucoup pour votre réponse rapide.

  4. #4
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Est ce que le returnn fonctionnera sur un string?
    Bien sûr! c'est d'ailleurs de cette manière que tu as défini le prototype de ta fonction.

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    petite remarque en passant, le throw derrière le return ne sert à rien

    ret ne sert pas à grand chose car il est inchangé dans l'opération, bref lorsque recv retournera 0 (plus rien à lire) alors vous retournerez toujours une string vide, est-bien le but ?

    return buffer[VALEUR] ne va pas car vous tentez de retourner un caractère et non un chaine. pouruoi ne pas retourner buffer ?
    attention pour le moment vous n'ajoutez pas de 0 final

    pour finir : pourquoi lire caractère par caractère ? pour gérer les découpages de buffer indiqués par \n ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Bonjour


    petite remarque en passant, le throw derrière le return ne sert à rien

    Je pensais qu'il était nécessaire pour indiquer l'erreur.

    ret ne sert pas à grand chose car il est inchangé dans l'opération, bref lorsque recv retournera 0 (plus rien à lire) alors vous retournerez toujours une string vide, est-bien le but ?

    J'ai oublié de changer cette partie du code en effet il ne sert a rien du tout.


    return buffer[VALEUR] ne va pas car vous tentez de retourner un caractère et non un chaine. pouruoi ne pas retourner buffer ?
    attention pour le moment vous n'ajoutez pas de 0 final
    Je ne pensais pas que retourner buffer permettait de retourner toute les valeurs du tableau.

    pour finir : pourquoi lire caractère par caractère ? pour gérer les découpages de buffer indiqués par \n ?
    Enfaite je pensais qu'il était necessaire de lire caractère par caractère pour pouvoir mettre les octet dans le tableau tout en sachant que leur nombres ne dépassera pas 2048.

    Merci pour vos réponse. Merci beaucoup.


    Edit: Quand je met: return buffer il me dit conversion from <<STD//STRING*>> to a non scalar type <<std::string>>requested.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Je ne comprend pas vraiment, désolé pour mon ignorance, enfaite en initialisant un tableau a string comme buffer[VALEUR] si je veus pouvoir exploiter mon tableau dans le main je peu return buffer seulement?

  8. #8
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    boost::asio propose ce genre de truc deja tout écrit

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Merci je vais regarder de ce pas.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Si j'utilise le boost::asio, je vais devoir l'utiliser dans tout mon programme ou pas?

    J'ai regarder un peu je n'ai pas trouver beaucoup d'exemples j'ai surement mal cherché mais en tout cas c'est vrai que j'ai vus qu'il savait fait quelque chose pour les buffer, pour recevoir et envoyer des bit.

    Merci pour le coup de main en tout cas.

  11. #11
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Il y a un tutoriel très complet sur boost.asio disponible sur developpez, ca pourra peut-être t'aider.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    D'accor merci!

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Voila une nouvelle question:

    A t'on vraiment besoin d'un tableau?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    recv(SocketServerCon, &r, 1, 0)
     
    /* Read N bytes into BUF from socket FD.
       Returns the number read or -1 for errors.
     
       This function is a cancellation point and therefore not marked with
       __THROW.  */
    extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
    Est ce qu'en mettant a la place du 1 pour le 2048 (le nombre d'octet que je veux). ca remplace le tableau que j'essaye de créer et d'utiliser?

  14. #14
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    La memoire va pas s'allouer comme ça :o

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    D'accore merci pour a réponse.

    De toute façon j'avai fait des essaies et j'ai compris que ce n'était en aucun cas la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Socket: Comment envoyer et recevoir des octets?
    Par LiaGalanodel dans le forum Langage
    Réponses: 3
    Dernier message: 04/03/2010, 12h06
  2. Problème envoyer/recevoir dans Outlook 2003
    Par Jipé70 dans le forum Outlook
    Réponses: 8
    Dernier message: 28/12/2007, 09h40
  3. problème de detection des CD dans mes lecteurs
    Par zakfa dans le forum Windows XP
    Réponses: 8
    Dernier message: 31/03/2005, 11h07
  4. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo