Bonjours tout le monde !
Comme le titre le dis, je voudrais réaliser un programme qui me permet de récupérer le contenu d'une page internet et ensuite de l'enregistrer dans un fichier.
Comme vous le savez sans doute, j'ai des soucis dont voici un bref aperçu :
1) Je ne sais pas par quel protocole internet les serveurs http sont communiquants (TCP/IP connecté, non connecté; UDP; ou autre...)
2) j'ai essayé une partie de code en TCP/IP connecté, je n'arrive pas a me connecté au serveur souhaité.
3) J'ai essayé le TCP/IP non connecté, il me donne une erreur #10022 (bon j'admets ne pas savoir si vraiment il y a un mode tcp non connecté...)
4) Lorsque je suis en UDP, le programme s'arrête dès qu'il a envoyé les données et ne fait plus rien.
5) lorsque je regarde ce qui transite sur mon réseau, aucune données ne part de mon ordi lorsque je lance mon programme.
pour ceux qui veulent du code, le voici :
Je suis désolé si mon code n'est pas super et comporte des erreurs grossières, je ne suis vraiment pas spécialiste du réseau en c... merci pour votre compréhension !
Pour tout ce qui est création :
Pour tout ce qui est connexion/initialisation :
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 if (WSAStartup (MAKEWORD(2, 0), &m_WSAData) != 0) { //if (OpenUDPtoServer(m_Port, &m_Socket) == ECOMM_WSASTARTUP) {} else { m_SocketType = comm; strcpy (m_HostName, Host); m_Port = port; TempIp = HostNametoIPv4 (Host); memcpy (m_IPv4, TempIp, strlen(TempIp)+1); m_ServerAddress.sin_family = AF_INET; m_ServerAddress.sin_port = htons(m_Port); // htons () if (m_ServerAddress.sin_addr.s_addr = inet_addr (m_IPv4) != 0) { InitSocket(); } else { printf ("[IP ADDRESS] - Not valid.\n"); } } }
Pour tout ce qui est transmission/réception :
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 if (m_SocketType == E_COMTYPE_TCP_CONNECTED || m_SocketType == E_COMTYPE_TCP_NCONNECTED) { if ((m_Socket = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET) { if (m_SocketType == E_COMTYPE_TCP_CONNECTED) { printf ("Connecting to %s\nOn port: %d\nProtocol TCP/IP\n", m_IPv4, m_Port); // if (inet_pton (AF_INET, m_IPv4, &m_ServerAddress.sin_addr) <= 0) if (connect (m_Socket, (struct sockaddr *) &m_ServerAddress, sizeof (m_ServerAddress)) == SOCKET_ERROR) { printf ("[SOCKET] - Problem while connection to server.\n"); } // No error else { printf ("[SOCKET] - Connected to server.\n"); } } else { printf ("[PROTOCOL] - TCP/IP not connected.\n"); } } else { printf ("[SOCKET] - Problem while socket() : invalid socket.\n"); } } else { printf ("Protocol UDP\n"); m_Socket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (m_Socket == INVALID_SOCKET) { printf ("[SOCKET] - Error while socket().\n"); } }
Voilà, je vous remercie d'avance pour votre aide et j'attends avec impatience vos réponses !
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 char URL[1024], Content[1024]; int ReceivedBytes, SendedBytes, Size; sprintf (URL, "GET %s HTTP/1.1\r\nHost: %s\r\nAccept: text/html\r\nContent-Type: text/html\r\nConnection: keep-alive\r\n", url, m_HostName); Size = sizeof(m_ServerAddress); // printf ("%s", URL); if (m_Socket != INVALID_SOCKET) { switch (m_SocketType) { case E_COMTYPE_TCP_CONNECTED : SendedBytes = send (m_Socket, URL, sizeof(URL)+1, 0); break; case E_COMTYPE_TCP_NCONNECTED : case E_COMTYPE_UDP : SendedBytes = sendto (m_Socket, URL, sizeof(URL)+1, 0, (sockaddr *) &m_ServerAddress, sizeof(m_ServerAddress)); break; } if (SendedBytes >= 0) { printf ("[SENDING] - %d Bytes sended.\n", SendedBytes); } else { printf ("[SENDING] - Problem while sending message :\n%s", URL); } if (m_SocketType == E_COMTYPE_TCP_CONNECTED) { ReceivedBytes = recv (m_Socket, Content, 1024, 0); } else { ReceivedBytes = recvfrom(m_Socket, Content, 1024, 0, (sockaddr *) &m_ServerAddress, &Size); } if (ReceivedBytes <= 0) { printf ("Error #%d\n", WSAGetLastError ()); printf ("[INFO] - Size of structur : %d, Size of content : %d\n", sizeof (sockaddr), sizeof (m_ServerAddress)); } else { printf ("[%d] - %s\n", ReceivedBytes, Content); } } else { printf ("[SOCKET] - Error invalid socket\n"); }
A bientôt !
Partager