salut les amis
je viens de commencer avec les socket et je veux savoir comment transferer un fichier (un gif dans mon ex)
cote serveur :
cote client :
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 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <winsock2.h> #define TAILLE_MAX 1024 int main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); struct sockaddr_in addr1,addr2 ; char chaine[TAILLE_MAX] , T[TAILLE_MAX]; FILE *fichier = fopen("server.gif","r"); if(fichier == NULL){ printf("Error avec le fichier\n"); getch(); exit(1); } int Id1 = socket(AF_INET,SOCK_STREAM,0) ; addr1.sin_family = AF_INET ; addr1.sin_port = htons(1500) ; addr1.sin_addr.s_addr = htonl(INADDR_ANY) ;//inet_addr("127.0.0.1") ; if( bind( Id1,(struct sockaddr *)&addr1,sizeof(addr1) ) == -1 ){ printf("Bind Error\n") ; getch(); exit(1); } listen(Id1,10); printf("En attente de connexion...\n"); int len1 = sizeof addr2 ; int Id2 = accept( Id1 , (struct sockaddr *) (&addr2) , &len1 ) ; printf("Machine connected !!\nIP : %s\tID : %d\n",inet_ntoa(addr2.sin_addr),Id2); while(fgets(chaine, TAILLE_MAX, fichier) != NULL){ printf("%d Octets send\n",send(Id2 , chaine , strlen(chaine) , 0)); } close(Id1); close(Id1); fclose(fichier); WSACleanup(); getch(); }
voila le resultat
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 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <winsock2.h> #define TAILLE_MAX 1024 int main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); FILE *fichier = NULL ; struct sockaddr_in addr1,addr2 ; int n; char T[TAILLE_MAX]; int ID1 = socket(AF_INET,SOCK_STREAM,0) ; addr1.sin_family = AF_INET ; addr1.sin_port = htons(1500) ; addr1.sin_addr.s_addr = inet_addr("127.0.0.1") ; if( connect( ID1,(struct sockaddr *)&addr1,sizeof addr1 ) < 0 ){ printf("Connect Error\n") ; getch(); exit(1); } printf("Connect to server !!\n"); if( (fichier=fopen("client.gif","w")) == NULL ){ printf("Error avec le fichier\n"); getch(); exit(1); } while( (n=recv( ID1 , T , TAILLE_MAX-1 , 0)) > 0 ){ T[n]='\0' ; fputs(T, fichier); printf("%d octets recv\n",n); } close(ID1); fclose(fichier); WSACleanup(); getch(); }
du serveur :
(7 +51 +93 +18 +153 +19 +51 +93 +18 = 503 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 En attente de connexion... Machine connected !! IP : 127.0.0.1 ID : 140 7 Octets send 51 Octets send 93 Octets send 18 Octets send 153 Octets send 19 Octets send 51 Octets send 93 Octets send 18 Octets send
du client :
mais en resultat le fichier client.gif n'est pas vraiment une image
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Connect to server !! 503 octets recv
sa taille est 508 octets alors que la vrai image a 870 octets
et parfois j'obtien en resulat 0 octets
et d'autre fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part Connect to server !!
alors quelle est le probleme ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Connect to server !! 485 octets recv 18 octets recv
Partager