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;
}
Partager