Partage
  • Partager sur Facebook
  • Partager sur Twitter

sockets et ip

    8 août 2007 à 1:00:08

    Bonsoir(ou Bonjour, comme vous voulez^^)

    Donc voila, j'ai chopé un tuto sur les sockets, qui permet de faire un serveur multi-threads. Seulement, c'est pas bien(et pas mon habitude :-°:D ), j'ai recopié le code en, essayant de comprenddre un maximum, mais il y a certains points que je ne comprend pas. Comme l'ip que l'on doit mettre pour le client ...? Pour le serveur, dans le tuto en question l'ip est determinée comme cela :

    if( gethostname( HostName, 100 ) == SOCKET_ERROR ){
                    cerr<< "gethostname() a rencontré l'erreur "<< WSAGetLastError()  << endl;
                    return 1;
            }

            if( (host = gethostbyname( HostName ) ) == NULL){
                    cerr <<"gethostbyname() a rencontré l'erreur "<< WSAGetLastError()<< endl;
                    return 1;
            }

            memcpy( &MyAddress.s_addr, host->h_addr_list[0], sizeof( MyAddress.s_addr ) );

            ServerAddr.sin_addr.s_addr = inet_addr( inet_ntoa( MyAddress ) );
     


    Si j'ai bien compris, c'est donc l'ip de la machine...?

    Mais ensuite, est ce que quelqu'un peut me dire comment determiner quelle ip l'on met coté client s'il vous plait?
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2007 à 1:08:00

      Je comprend pas trop ce que tu veux savoir, mais ton code lui prend le nom de ta machine, ensuite trouve c'est donner internet et l'insert dans une structure.

      Citation : Freak

      Mais ensuite, est ce que quelqu'un peut me dire comment determiner quelle ip l'on met coté client s'il vous plait?


      L'ip du serveur et le port?
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2007 à 1:13:41

        Je veux savoir en fait ce qu'on fait coté client. Je veux dire, il faut bien faire un autre programme pour le client non? Qu'il se connecte au serveur, etc.. Celui que j'ai fait avec le tuto ne sert que pour le serveur(enfin je crois :euh: ) et donc dans ce programme, on créé une autre socket, et on "assigne" quel ip a cette socket?
        Je ne sais pas si je suis plus clair^^
        Mais je ne comprend pas non plus ce que tu dis ici :

        Citation : [Kansuu]

        ensuite trouve c'est donner internet et l'insert dans une structure.

        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2007 à 1:21:21

          Citation : Freak

          Je veux savoir en fait ce qu'on fait coté client. Je veux dire, il faut bien faire un autre programme pour le client non? Qu'il se connecte au serveur, etc.. Celui que j'ai fait avec le tuto ne sert que pour le serveur(enfin je crois :euh: ) et donc dans ce programme, on créé une autre socket, et on "assigne" quel ip a cette socket?
          Je ne sais pas si je suis plus clair^^
          Mais je ne comprend pas non plus ce que tu dis ici :

          Citation : [Kansuu]

          ensuite trouve c'est donner internet et l'insert dans une structure.



          Pour le socket, si tu ne lui a pas défini un nombre en particulier, je crois que windows lui en donne un automatique, faut voir du coter de la doc je me souvient pu trop du code.

          Ensuite ce que je voulais dire, c'est que la fonction getHostbyname() renvoie une structure (je sais plu trop le nom) et que dans cette structure contient l'adresse IP les ports, DNS...etc.
          • Partager sur Facebook
          • Partager sur Twitter
            8 août 2007 à 14:48:58

            Effectivement je crois que windows lui en affecte une, mais cela ne marche toujours pas... Voila mon code(client toujours), le probleme est peut être autre pars que l'ip...Ce code(en dessous) me renvoie "echec du bind, erreur Nr : 10049".
            Et la description de cette erreur 10049 est

            Citation : Pas de titre

            Cannot assign requested address.
            The requested address is not valid in its context. Normally
            results from an attempt to bind to an address that is not
            valid for the local machine, or connect/sendto an address
            or port that is not valid for a remote machine.


            Le port est bien le même dans le programme du serveur donc le probleme ne viens pas de la.
            1. WSADATA WSAData;
            2.     WSAStartup(MAKEWORD(2,0), &WSAData);
            3.     SOCKET sock;
            4.     SOCKADDR_IN sin;
            5.     //j'avais mis l'ip ici avec sin.sin_addr.s_addr = inet_ntoa([une ip]) mais apperement c'est inutile
            6.     sin.sin_family = AF_INET;
            7.     sin.sin_port = htons(12345);
            8.     sock = socket(AF_INET, SOCK_STREAM, 0);
            9.     if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) {
            10.         cout << "echec du bind, erreur Nr : " << WSAGetLastError() << endl;
            11.         closesocket(sock);
            12.         WSACleanup();
            13.         system("PAUSE");
            14.         return 1;
            15.     }
            16.     if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == INVALID_SOCKET) {
            17.         cout << "invalid socket, erreur Nr : " << WSAGetLastError() << endl;
            18.         closesocket(sock);
            19.         WSACleanup();
            20.         system("PAUSE");
            21.         return 1;
            22.     }
            23.     cout << "Vous êtes connecté" << endl;

            Et je ne sais pas si c'est important mais le socket d'ecoute dans le programme du srveur se fait ainsi :
            1. ListeningSocket = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP );
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2007 à 17:57:21

              Si j'en crois a l'erreur, l'addresse/le port que tu tente de définir a ton serveur est invalide pour ton ordinateur ou celle a distance.
              Si tu as un routeur, est-ce que le port 12345 est bien ouvert?
              Sinon essaie de changer de port.
              • Partager sur Facebook
              • Partager sur Twitter

              sockets et ip

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown