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

Windows Discussion :

probleme avec getaddrinfo de winsock2


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut probleme avec getaddrinfo de winsock2
    Bonjour,

    Dans le code que je joints, getaddrinfo me retourne l'erreur

    WSAHOST_NOT_FOUND
    11001
    Host not found.
    No such host is known. The name is not an official host name or alias, or it cannot be found in the database(s) being queried. This error may also be returned for protocol and service queries, and means that the specified name could not be found in the relevant database.
    (source msdn)


    J'ai verifie le nom de la machine retourne par la fonction
    gethostname et il est correct.

    Que suggerez-vous comme cause d'erreur?

    Frank

    code source:

    #include <winsock2.h>
    #include <Ws2tcpip.h>
    #include <stdio.h>
    #include <io.h>

    #define LINE_LENGTH 80
    #define FILENAME_LENGTH 30

    int main(void)
    {
    int error = 0;

    // initialiser la librairie winsock
    WSAData wsaData;
    if((error = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
    {
    // traiter l'erreur ici.
    }

    // creer le socket.
    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    // se connecter au serveur - il faut du network endian.
    sockaddr_in name;
    name.sin_family = AF_INET;
    name.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    name.sin_port = htons(27015);


    if(connect(clientSocket, (sockaddr *)&name, sizeof(name)) == SOCKET_ERROR)
    {
    error = WSAGetLastError();
    // logger un message d'erreur comprehensible ou l'afficher.
    //FormatMessage(
    }


    // creer un fichier pour sauvegarder les donnees
    char templateName[FILENAME_LENGTH] = "ClientLogXXXXXX";
    char* fileName = _mktemp(templateName);

    HANDLE hLogFile = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD nbOfBytesWritten;
    WriteFile(hLogFile, "Client: ", strlen("Client: "), &nbOfBytesWritten, NULL);

    // obtenir l'adresse du pc ou roule le client.
    addrinfo hints;
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_addrlen = 0;
    hints.ai_canonname = NULL;
    hints.ai_addr = NULL;
    hints.ai_next = NULL;

    struct addrinfo *results = NULL;

    char hostName[40];
    gethostname(hostName, 40);

    error = getaddrinfo(hostName, NULL, &hints, &results);
    if(error != 0){
    //traiter l'erreur ici.
    }

    // echanger avec le serveur.
    char buffer[80];
    sprintf(buffer, "Hello from the client at ip = %s \r\n", results->ai_addr->sa_data);

    WriteFile(hLogFile, buffer, strlen(buffer), &nbOfBytesWritten, NULL);

    send(clientSocket, buffer, sizeof(buffer), 0);
    memset(buffer, 0, sizeof(buffer));

    recv(clientSocket, buffer, sizeof(buffer), 0);
    WriteFile(hLogFile, "Server: ", 9, &nbOfBytesWritten, NULL);
    WriteFile(hLogFile, buffer, strlen(buffer), &nbOfBytesWritten, NULL);
    WriteFile(hLogFile, "\r\n", strlen("\r\n"), &nbOfBytesWritten, NULL);

    // fermer le socket
    closesocket(clientSocket);
    // traiter l'erreur ici.

    // fermer le fichier
    CloseHandle(hLogFile);

    freeaddrinfo(results);

    // relacher la librairie winsock
    WSACleanup();
    // traiter l'erreur ici.

    return 0;
    }

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour ,

    J'ai trouve l'erreur. Il faut initialiser le flag ai_flags.
    Voici la nouvelle partie du code source:

    addrinfo hints;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_CANONNAME;
    hints.ai_addrlen = 0;
    hints.ai_canonname = NULL;
    hints.ai_addr = NULL;
    hints.ai_next = NULL;

    Frank...

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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