Bonjour,
j'écris les prémices d'un client HTTP en commençant par le test d'une requête GET avec le code suivant. Mes deux machines dont l'une est serveur avec Wamp sont connectées l'une à l'autre par un câble croisé. Tout fonctionnait à travers un navigateur ou via telnet mais nada avec ce code jusqu'à ce que j'y implémente un recv() suite au send(). Wireshark me montrait bien les trames échangées après le connect() puis plus rien, comme si le send() n'émettait rien du tout.
Ma question:
comment fonctionne exactement un échange en mode connecté? Pourquoi ne voit-on rien passer suite au send() avec un message d'erreur si personne n'écoute de l'autre côté?

Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
/*
** envoi d'une requête Get vers la page index.html du répertoire www de wamp
*/
 
int main()
{
    int sock;
 
    char req[512] = {"GET /index.html HTTP/1.1\r\n"};
    strcat(req, "HOST: 192.168.0.2\r\n");
    strcat(req, "\r\n");
 
    if((sock = setClientHTTP()) == 0)
    {
        printf("Erreur: echec initialisation connexion reseau\n");
        return 0;
    }
 
    send(sock, req, strlen(req), 0);
    close(sock);
    WSACleanup();
 
    return 0;
}
 
/******************************************************************************
** setClientHTTP(): initialise le client HTTP
** Entrée:
** Sortie: 1 si ok, 0 sinon
******************************************************************************/
int setClientHTTP()
{
    int sockfd;
    struct sockaddr_in remote;
    WSADATA wsaData;
 
    if (WSAStartup(MAKEWORD(2,1), &wsaData) != 0) {
        fprintf(stderr, "WSAStartup failed.\n");
        return 0
    }
 
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("Socket");
        WSACleanup();
        return 0;
    }
 
    memset(&remote, 0, sizeof(remote)); // en System V
    remote.sin_family = AF_INET;
    remote.sin_port = htons(80);
    remote.sin_addr.s_addr = inet_addr("192.168.0.2");
    if (connect(sockfd, (struct sockaddr*)&remote, sizeof(remote)) < 0) // error
    {
        perror("Connect");
        WSACleanup();
        return 0;
    }
    return sockfd;
}