Socket: Comment envoyer et recevoir des octets? [Résolu]

LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 3 mars 2010 à 10:38 - Dernière réponse : LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention
- 4 mars 2010 à 11:12
Bonjour,

Je m'appelle Amélie et je suis en apprentissage.
Je débute en C++ (j'ai suivis en partis le tutorial du site du zéros et d'autres tutoriaux) étant familière en programmation C et ayant un peu fait de java pour la programmation objet j'éssaye de me débrouiller.

Mais j'ai un problème.
J'ai réussis a faire un programme sur les Socket basé sur un client et un server s'envoyant simplement des "Hello". Mais maintenant je veu arriver a envoyer des octets et là je ne sais pas comment faire. je suis perdue.

Il faut savoir que mon programme se basait sur entre autre deux fonctions pour envoyé et recevoir une chaine de caractère: SendLine et ReceiveLine quié tait déclaré dans un header et définiot dans un source a part (c'est de toute façon comme ça que l'on fait dans les languages programmé objet a ce que j'ai compris).
J'aimerais donc tout simplement creer une fonction SendBytes et ReceiveBytes que je pourrais définir et utilisé comme bon me semble mais je n'ai aucune idée sur la gestion des octets.

Voila.

Merci a ceux qui feront attention a ce post.

Cordialement.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 4 mars 2010 à 10:53
3
Merci
petite erreur de copier/coller : c'est ReceiveByte.

std::vector< char > buffer;
// par ex
buffer.push_back(0x45) // 1er octet
buffer.push_back(0x05) // 2e octet
....
SendBytes(buffer);

Merci fregolo52 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de fregolo52
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 3 mars 2010 à 17:29
0
Merci
salut,

est ce que tu as accès au code sources de SendLine et ReceiveLine ?

Peux-tu nous montrer les prototypes ? Parce que je ne vois pas pourquoi tu ne pourrais pas envoyer des octets via SendLine.
Commenter la réponse de fregolo52
jerem3000 52 Messages postés jeudi 23 avril 2009Date d'inscription 7 décembre 2011 Dernière intervention - 4 mars 2010 à 08:07
0
Merci
Bonsoir,

Normalement tu dois pouvoir le faire avec t'es fonction SendLine et ReceiveLine.

Je ne suis pas sur d'avoir bien comprit ton problème, en gros tu aimerais pouvoir transférer autre chose que des fichier texte ou des chaine de caractère?

Si c bien sa ton problème pour transférer des binaire il te suffit de les ouvrir en mode binaire car pour le transfert c le même principe.

jérémy
Commenter la réponse de jerem3000
LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 4 mars 2010 à 08:21
0
Merci
Pour mes fonctions voila leur prototypes:
//SENDLINE
void Socket::SendLine(std::string s) {
  s += '\n';
  send(s_,s.c_str(),s.length(),0);
}


//RECEIVELINE
std::string Socket::ReceiveLine() {
  std::string ret;
 //Infinite loop  
 while (1) {
    char r;

//switch(variable)
    switch(recv(s_, &r, 1, 0)) //Descriptor that identifies a connected 
//socket, a pointer to the buffer to receive incomming data (r adress), 
//length in bytes of the buffer pointed,a set of flag that influence the 
//behavior of this function. 
{   
      case 0: //If recv retiurn 0 the connection is close
  // not connected anymore;
              // ... but last line sent
              // might not end in \n,
              // so return ret anyway.
        return ret;
      case -1://Error managment
        return "";
//      if (errno == EAGAIN) {
//        return ret;
//      } else {
//      // not connected anymore
//      return "";
//      }
    }


Mon problème est que j'aimerais pouvoir transfer des octets mais je ne sais pas comment les déclarer, les utiliser.

Donc le principe c'est que je peus le faire avec ces fonctions.
Commenter la réponse de LiaGalanodel
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 4 mars 2010 à 09:26
0
Merci
une idée :
Attention je n'ai pas testé (case -1 : c'est peut-etre une connerie ce que j'ai fais)et je ne suis pas super balaise en STL, mais si tu gardes les STL, je pense que ceci est possible.
//SENDBYTES
void Socket::SendBytes(std::vector< char > p) {
  send(s_,p,p.size(),0);
}


std::vector< char > Socket::ReceiveLine() {
  std::vector< char > ret;
 //Infinite loop  
 while (1) {
    char r;

//switch(variable)
    switch(recv(s_, &r, 1, 0)) //Descriptor that identifies a connected 
//socket, a pointer to the buffer to receive incomming data (r adress), 
//length in bytes of the buffer pointed,a set of flag that influence the 
//behavior of this function. 
{   
      case 0: //If recv retiurn 0 the connection is close
  // not connected anymore;
              // ... but last line sent
              // might not end in \n,
              // so return ret anyway.
        return ret;
      case -1://Error managment
        return std::vector< char >NULL;
//      if (errno == EAGAIN) {
//        return ret;
//      } else {
//      // not connected anymore
//      return "";
//      }
    }


je ne vois pas quand est affecté le char r avec les vecteurs tu feras : ret.push_back(r);
Commenter la réponse de fregolo52
LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 4 mars 2010 à 09:34
0
Merci
Merci beaucoup pour ton aide!


Est ce que c'est normal que dans le code il y est:
std::vector< char > Socket::ReceiveLine() {

Sinon je vais tester ce que tu m'a proposer merci beaucoup.
Commenter la réponse de LiaGalanodel
LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 4 mars 2010 à 09:36
0
Merci
Toutees mes escuses je viens de comprendre le pourquoi. Je vais essayer de suite!
Commenter la réponse de LiaGalanodel
LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 4 mars 2010 à 09:51
0
Merci
J'ai juste une question: quelle est la syntaxe pour envoyé des octets quand j'apelle la fonction Sendline, je dois mettre:
Sendline (0x02) ?
Commenter la réponse de LiaGalanodel
LiaGalanodel 19 Messages postés mercredi 3 mars 2010Date d'inscription 29 juillet 2010 Dernière intervention - 4 mars 2010 à 11:12
0
Merci
Très bien! Merci beaucoup!

J'ai pas mal d'erreurs je vais regarder tout ça.
En tout cas je te remerci beaucoup pour m'avoir répondus et aussi rapidement en plus.
Commenter la réponse de LiaGalanodel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.