begin process at 2012 05 28 21:43:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

comment Recupérer Variables d'une fonction ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comment Recupérer Variables d'une fonction ?

vendredi 11 février 2011 à 09:26:38 | comment Recupérer Variables d'une fonction ?

baptchr55


Bonjour à tous. Voilà, j'ai un problème, je cherche à récupèrer mes valeurs x,y,z dans le main... je ne sais pas comment faire...

Quelqu'un peut-il m'aider ??

Merci par avance.



******************** Socket.cpp *******************

#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include "Socket.h"
#include "Deplacement.h"

#define MAX_MSG 100 //longeur max de la trame
#define MSG_ARRAY_SIZE (MAX_MSG+3)// 3 caractères pour les codes ASCII 'cr', 'lf' et '\0'
using namespace std;

int listenSocket, i;
//unsigned short int listenPort=1501, msgLength;
socklen_t clientAddressLength;
struct sockaddr_in clientAddress, serverAddress;
char msg[MSG_ARRAY_SIZE];


float Ouverture_Socket()
{


unsigned short int listenPort=1501, msgLength;
//socklen_t clientAddressLength;
//struct sockaddr_in clientAddress, serverAddress;
//char msg[MSG_ARRAY_SIZE];
memset(msg, 0x0, MSG_ARRAY_SIZE); // Mise à zéro du tampon

listenSocket = socket(AF_INET, SOCK_DGRAM, 0);// Création de socket en écoute et attente des requêtes des clients

if (listenSocket < 0)
{
cerr << "Impossible de créer le socket en écoute\n";
exit(1);
}

// On relie le socket au port en écoute.

serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(listenPort);

if (bind(listenSocket,(struct sockaddr *) &serverAddress,sizeof(serverAddress)) < 0)
{
cerr << "Impossible de lier le socket en écoute\n";
exit(1);
}


//*********** Attente des requêtes des clients *************

listen(listenSocket, 5);
cout << "Attente de requête sur le port " << listenPort << "\n";
}

float Reception_Trame()
{

clientAddressLength = sizeof(clientAddress);
memset(msg, 0x0, MSG_ARRAY_SIZE);// Mise à zéro du tampon de façon à connaître le délimiteur de fin de chaîne.

if (recvfrom(listenSocket, msg, MSG_ARRAY_SIZE, 0,(struct sockaddr *) &clientAddress,&clientAddressLength) < 0)
{
cerr << " Problème de réception du messsage\n";
exit(1);
}

//cout << " Depuis " << inet_ntoa(clientAddress.sin_addr);// Affichage de l'adresse IP du client.
//cout << ":" << ntohs(clientAddress.sin_port) << "\n";// Affichage du numéro de port du client.
cout << " Message recu : " << msg << "de "<<&clientAddress<<"\n";// Affichage de la ligne reçue

//***************** Recup Trame Cmd Manuelle ********************

char ASCIIx[3]={msg[0],msg[1]};
char ASCIIy[3]={msg[2],msg[3]};
char ASCIIz[3]={msg[4],msg[5]};
char ASCIIbroche[2]={msg[6],msg[7]};

float x,y,z;
float *dx,*dy,*dz;
x=atof(ASCIIx);
dx=&x;
cout<<"x: "<<x<<endl;

y=atof(ASCIIy);
dy=&y;
cout<<"y: "<<y<<endl;

z=atof(ASCIIz);
dz=&z;
cout<<"z: "<<z<<endl;
// Deplacement(x,y);
// AxeZ(&z);

return(*dx);

}

vendredi 11 février 2011 à 22:26:00 | Re : comment Recupérer Variables d'une fonction ?

pop70

Réponse acceptée !
S'il est possible de modifier la fonction Reception_Trame() :

Solution 1 : Par pointeur

exemple :
Code C/C++ :
#include <iostream>

void f(float *dx,float  *dy,float *dz);

int main()
{

    float Dx, Dy, Dz;

    f(&Dx, &Dy, &Dz);

    std::cout << Dx << "\n" << Dy << "\n" << Dz << "\n\n";
    // Affiche 5 6 7


    return 0;
}


void  f(float *dx,float  *dy,float  *dz)
{

*dx = 5;
*dy = 6;
*dz = 7;

}


Solution 2 : par référence

exemple :
Code C/C++ :
#include <iostream>

void f(float &dx ,float  &dy,float &dz);

int main()
{

    float Dx, Dy, Dz;

    f(Dx, Dy, Dz);

    std::cout << Dx << "\n" << Dy << "\n" << Dz << "\n\n";
    // Affiche 5 6 7

    return 0;
}


void f(float &dx ,float  &dy,float &dz)
{

dx = 5;
dy = 6;
dz = 7;

}


Solution 3 : par conteneur

exemple :
Code C/C++ :
#include <iostream>
#include <vector>

std::vector<float>  f();

int main()
{

    std::vector <float> Dn;

    Dn = f();

    std::cout << Dn[0]<< "\n" << Dn[1]<< "\n" << Dn[2] << "\n\n";
    // Affiche 5 6 7

    return 0;
}


std::vector<float>  f()
{
float dx = 5, dy = 6, dz= 7;

std::vector<float> retour;

retour.push_back(dx);
retour.push_back(dy);
retour.push_back(dz);


return retour;
}



C++dialement

Pop70
mardi 15 février 2011 à 13:03:56 | Re : comment Recupérer Variables d'une fonction ?

baptchr55


Bonjour, merci de ton attention et surtout de la réponse apportée. En effet ta méthode par pointeurs ou référence me plait beaucoup et je vais m'en servir. Par contre la dernière n'est absolument pas à ma portée. je ne maitrise pas ce point.

J'ai avant ta réponse pu réussir en contournant la difficulté (mais en trichant un peut) j'ai retourné via la fonction, la variable "msg" pour ne la traiter que par la suite dans le main.

Ceci dit les pointeurs semblent quand même beaucoup plus professionnel ;-)

encore merci.
Cordialement.


Cette discussion est classée dans : include, socket, msg, serveraddress, clientaddress


Répondre à ce message

Sujets en rapport avec ce message

socket [ par flatou ] salutvoila le code du serveur sous dos que j'ai fait :#include #include #include #pragma comment(lib, "ws2_32.lib")SOCKET s;SOCKET c;SOCKET result;soc encore mon serveur [ par skysee ] bonjour,je suis toujours avec mon serveur en c sous visual c++ sous windows(sis eulement j'avais linux).Le problème est que je n'ai pas d'erreur de co Client FTP sous QNX (ou bien Unix, Linux) [ par Gui51 ] Bonjour,je voudrais savoir si vous avez une aide à m'apporter concernant cette compilation de code pour le client:#include <stdi Probleme reception sur un serveur windows en vc++ [ par alfred ] Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi, toute mes socket sont positives le client envois Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l probleme de communication entre deux programme [ par smook ] re salut le dernier message que j ai poster c etait pour les socket et la librairie "libwsock.a" mais sayer j ai passer cette etape j ai reussi a fair touches [ par Xs ] voila, j'ai essayé de tester des touches afin que, par exemple, lorsque l'on appuie sur Y, une message box apparaisse.j'ai recupérer ce code venat de erreur memoire [ par Xs ] alors voila, j'ai jamais vu ca.je lance mon programme. normal. puis je clique sur le bouton generer et là, pouf !un message d'erreur. alors, celui la, Chat en C sous Linux [ par slobberbone ] Bonjour à tous et bonne Année 2005 ! Voilà j'ai un projet à faire, il consiste à faire une messagerie instantanée ( Client & Serveur ) J'arrive à fai


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales