begin process at 2010 02 10 16:03:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Réseau & Internet

 > 

Problème adresse ip et inet_addr


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

Problème adresse ip et inet_addr

lundi 15 décembre 2008 à 18:15:53 | Problème adresse ip et inet_addr

Spiffou

Bonjour à tous,

une petite question qui reste sans réponse et très mystérieuse pour moi (ou alors c'est tellement gros que depuis que je me pose la question je ne vois plus le pb)

voici le contexte:
j'essaie de faire un transfert en UDP unicast entre 2 machines. pour cela j'ai une fonction sendTo qui prend en argument divers paramètres (dont l'ip de destination du message)
jusque là rien d'étonnant.

à l'utilisation je vois que les messages sont bien transmis mais pas de la façon souhaitée (cf. code ci dessous), les messages sont envoyés en broadcast et pas à la machine ciblée...
si l'un d'entre vous voit une explication à cela je serai très heureux de la connaitre.

merci d'avance

Spiffou

// Avec char *destIp = 10.0.11.7 à l'entrée de la fonction
char constDestIp[256];
sprintf (constDestIp,"%s",destIp);

sockaddr_in fsock;
memset(&fsock, 0, sizeof(fsock));
fsock.sin_family = AF_INET;           
fsock.sin_port = htons((u_short)destPort);   

fsock.sin_addr.s_addr = inet_addr(constDestIp);
printf(str,"TEST -%s",inet_ntoa(fsock.sin_addr));    // mon ip vaut 255.255.255.255

if (destIp)
{
    fsock.sin_addr.s_addr = inet_addr(destIp);
    printf(str,"TEST -%s",inet_ntoa(fsock.sin_addr));    // mon ip vaut 255.255.255.255
}

fsock.sin_addr.s_addr = inet_addr("10.0.11.7");
printf(str,"TEST -%s",inet_ntoa(fsock.sin_addr));    // mon ip vaut 10.0.11.7
lundi 15 décembre 2008 à 18:49:25 | Re : Problème adresse ip et inet_addr

f_l_a_s_h_b_a_c_k

un class tres simple pour utiliser sochet
http://files.codes-sources.com/fichier.aspx?id=48531&f=websuck.cpp


  • class Socket
  • {
  • public:
  • Socket(){};
  • Socket(constchar * ip, constint port)
  • {
  • WSAStartup(0x0101,&wsaDATA);
  • socket_result = socket(PF_INET,SOCK_STREAM,0);
  • server_ip = newchar [strlen(ip)+1];
  • strcpy(server_ip, ip);
  • server_port = port;
  • address.sin_family = AF_INET;
  • address.sin_addr.s_addr = inet_addr(server_ip);
  • address.sin_port = htons(server_port);
  • }
  • ~Socket()
  • {
  • delete[] server_ip;
  • WSACleanup();
  • close(socket_result);
  • }
  • int Connect()
  • {
  • return connect(socket_result,(struct sockaddr *)&address,sizeof(address));
  • }
  • int Send(constchar *buf)
  • {
  • return send(socket_result, buf, strlen(buf), 0);
  • }
  • int Recive(char *buf, constint len)
  • {
  • return recv(socket_result, buf, len, 0);
  • }
  • void Close() { delete[] server_ip; WSACleanup(); close(socket_result);}
  • private:
  • char *server_ip;
  • int server_port;
  • SOCKET socket_result;
  • WSADATA wsaDATA;
  • struct sockaddr_in address;
  • };
  • ////////////////////////////////////////////////////////

  • void Get_mon_IP(char *ip)
  • {
  • struct hostent *host_entry;
  • char szHostName[128];


  • ///////////////////////////test lan
  • Socket resoudre("127.0.0.1", 80);
  • //////////////////////////////

  • gethostname(szHostName, 128);
  • host_entry=gethostbyname(szHostName);


  • // sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_name ) ) );
  • sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_addr) ) );
  • // sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_addr_list ) ) );

  • resoudre.Close();
  • }



  • int URL2IP(char *ip)
  • {
  • struct hostent *host_entry;
  • char szHostName[128];
  • //unsigned int addr;


  • ///////////////////////////test lan
  • Socket resoudre("127.0.0.1", 80);
  • //////////////////////////////

  • strcpy(szHostName,ip);

  • host_entry=gethostbyname(szHostName);


  • // sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_name ) ) );
  • sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_addr) ) );
  • // sprintf(ip, "%s", inet_ntoa(*( (struct in_addr *)host_entry->h_addr_list ) ) );


  • //say(ip);
  • resoudre.Close();

  • return 0;
  • }

  • rien plus simple!!!



  • lundi 15 décembre 2008 à 22:13:44 | Re : Problème adresse ip et inet_addr

    Spiffou

    merci, mais je cherche à comprendre pourquoi ma classe ne fonctionne pas correctement.

    qqun a t il une idée qui expliquerait le comportement bizarre de ma classe?
    mardi 16 décembre 2008 à 14:04:56 | Re : Problème adresse ip et inet_addr

    Spiffou

    Réponse acceptée !
    J'ai trouvé la solution:
    la chaine que je recevais en entrée était erronée et commençait par un espace:
    " 10.0.11.7"
    ce qui avait pour effet d'initialiser le sin_addr à INADDR_BROADCAST.

    En espérant que cela serve à d'autres.
    Merci à ceux qui se sont penchés sur mon pb.

    Spiffou


    Cette discussion est classée dans : ip, sin, inet, addr, fsock


    Répondre à ce message

    Sujets en rapport avec ce message

    Pb d'adresse IP pour transfert UDP unicast [ par Spiffou ] Double post car erreur de theme sur le 1er post.Bonjour à tous, une petite question qui reste sans réponse et très mystérieuse pour moi (ou alors c'es téléchargement d'un fichier via l'url [WINSOCK] [ par MorbhAck ] Bonsoir tout le monde!j'ai un problème, j'essai de télécharger un fichier .rar avec GETet quand je veux extraire le rar il m'indique que le fichier es Documentation Reseaux [ par SnowBlade360 ] Bonjour J'ai trouver sur inernet du code afin de crée une socket mais j'aimerais connaitre exactement tout les champs qui la compose voici mon code : http ip... [ par xionoxid ] BonjourJ'ai un petit problème, je voudrais aller sur un site persol'adresse est par exemple :http://XXXXXX.HEBERGEUR.COMdans mon programme je dois met "linked error" en C [ par thebadskull ] voila j'ai devc++ sous windows XPj'ai lu un tuto sur comment manier les sockets...voici mon code :void Scann(char buffer[],int port){WSADATA WSAData;W inet_addr donne une ip inversé, que faire? [ par themaste ] Bjr à tous!Voila, j'aimerais à partir d'un CString mettre à jour un contrôle d'adresse.Du coup, je fais les opérations suivantes:CString toto="192.168 récuparation IP [ par cyril4900 ] Bonjour, Voila je veux un code qui me récupère l'addresse IP de ma machine hote qui fonctionne sur Winows et LINUX. Et c'est la le problème car j'ai Injecter une adresse Ip sous LINUX avec QT Designer [ par diablo31170 ] Salut tout le monde, Ccomme le titre le précise, j'ai une machine sous Linux. Elle a un adresse IP du style 192.168.0.16, et grâce à un programme, je CreateProces et fork [ par laetitiavincent ] Bonjour tout le mondeAlors je sais que fork n'existe pas sous windows. On peut utiliser CreateProcess mais mon souci et que je mélange ca avec un sock Problème d'IP Client avec les winsock [ par Cphil51 ] Boujour a tous.Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d'


    Nos sponsors


    Sondage...

    Comparez les prix

    CalendriCode

    Février 2010
    LMMJVSD
    1234567
    891011121314
    15161718192021
    22232425262728

    Consulter la suite du CalendriCode

     
    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,827 sec (3)

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