probleme du transfert d'un fichier

probleme du transfert d'un fichier - C - Programmation

Marsh Posté le 07-01-2006 à 14:12:23    

salut  !!
 
j'aurai aimé que quelqun m'aide à tester ma source parceque j'arrive pas a savoir  
 
si ça fonctionner ou nan ,voila le code :
 

Code :
  1. // client :
  2. #include <winsock.h>
  3. #include <stdio.h>
  4. #pragma comment(lib, "wsock32.lib" )
  5. int main()
  6. {
  7. char buffer[1024] ;
  8. char nomfichier[30] ;
  9. printf("fichier : " ) ;
  10. scanf("%s",nomfichier) ; //fichier.txt
  11. FILE* file = fopen(nomfichier, //ouverture en lecture seule en mode txt
  12. "rb" ) ;
  13. if(file == NULL)
  14. {
  15. printf("erreur lors l'ouverture du fichier\n" ) ;
  16. exit(-1) ;
  17. }
  18. WSADATA WSAData;
  19. WSAStartup(MAKEWORD(1,0), &WSAData);
  20. SOCKET sock;
  21. printf("Ip : " ) ;
  22. scanf("%s",buffer) ;
  23. SOCKADDR_IN sin;
  24. sock = socket(AF_INET, SOCK_STREAM, 0);
  25. // les proprietes du socket du server
  26. sin.sin_addr.s_addr = inet_addr(buffer);
  27. sin.sin_family = AF_INET;
  28. sin.sin_port = htons(4444);
  29. int err ;
  30. if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == INVALID_SOCKET)
  31. {
  32. printf("la connection a echoué\n" ) ;
  33. getchar() ;
  34. scanf("%i",&err) ;
  35. return 1 ;
  36. }
  37. printf("connection etablie\n" ) ;
  38. send(sock,nomfichier,30,0) ;
  39. recv(sock,nomfichier,30,0) ;
  40. int SizeReaded = 1 ;
  41. long SizeSended = 1 ;
  42. printf("transfert des données en cours...\n" ) ;
  43. while(SizeReaded>0 && SizeSended>0)
  44. {
  45. SizeReaded = fread(buffer,1,1024,file) ;
  46. SizeSended = send(sock,buffer,SizeReaded,0) ;
  47. }
  48. fclose(file) ; // fermeture du fichier  
  49. closesocket(sock) ;
  50. WSACleanup() ;
  51. printf("fichier bien envoye\n" ) ;
  52. printf("appuyer sur une touche pour sortir ..." ) ;
  53. getchar() ;
  54. getchar() ;
  55. return 1;
  56. }
  57. /****************************************************/
  58. // server  
  59. #include <stdio.h> // printf
  60. #include <winsock.h>
  61. #pragma comment(lib, "wsock32.lib" )
  62. int main()
  63. {
  64. char buffer[1024] ;
  65. char nomfichier[30] ;
  66. memset(nomfichier,0,30) ;
  67. printf("veuillez attendre que le client se connecte ...\n" ) ;
  68. WSADATA WSAData;
  69. WSAStartup(MAKEWORD(1,0), &WSAData);
  70. SOCKET sock;
  71. SOCKET csock = INVALID_SOCKET;
  72. SOCKADDR_IN sin;
  73. sock = socket(AF_INET, SOCK_STREAM, 0);
  74. sin.sin_addr.s_addr = INADDR_ANY;
  75. sin.sin_family = AF_INET;
  76. sin.sin_port = htons(4444);
  77. bind(sock, (SOCKADDR *)&sin, sizeof(sin));
  78. listen(sock, 1);
  79. int a = sizeof(sin) ;
  80. while(csock == INVALID_SOCKET)
  81. {
  82. csock = accept(sock,(SOCKADDR*)&sin,&a) ;
  83. }
  84. printf("connection etablie\n" ) ;
  85. recv(csock,nomfichier,30,0) ;
  86. send(csock,nomfichier,30,0) ;
  87. FILE*file = fopen(nomfichier,"wb" ) ;
  88. if(file == NULL)
  89. {
  90. printf("erreur lors l'ouverture du fichier\n" ) ;
  91. exit(-1) ;
  92. }
  93. long SizeRecv = 1 ;
  94. int SizeWrited = 1 ;
  95. printf("reception des donnees ...\n" ) ;
  96. while(SizeRecv>0 && SizeWrited>0)
  97. {
  98. SizeRecv = recv(csock,buffer,1024,0) ; //reception des donnees
  99. SizeWrited = fwrite(buffer,1,SizeRecv,file); //ecriture du buffer
  100. }
  101. fclose(file) ;// fermeture du fichier
  102. printf("fermeture du fichier \n" ) ;
  103. closesocket(sock) ;
  104. WSACleanup() ;
  105. printf("transfert terminé fichier bien recu \n" ) ;
  106. printf("appuyer sur une touche pour sortir ..." ) ;
  107. getchar() ;
  108. return 1;
  109. }
  110. /****************************/


le probleme c'est que ça marche sur mon ordinateur .cepandant, lorsque je l'ai  
 
testé avec un de mes amis ayant un FireWall,ça n'a pas fonctionner il n'a rien  
 
recu .afin de bien clarifier la situation ,je crois qu'un autre test avec quelqun qui
 
a des connaissance en informatique sera fort utile .Sinon,ça sera simpa de me  
 
prevenir des erreurs que vous pourvez remarqué dans le code.
 
merçi d'avance

Reply

Marsh Posté le 07-01-2006 à 14:12:23   

Reply

Marsh Posté le 07-01-2006 à 14:47:27    

adm1n1s7ra7eur a écrit :

[/cpp]
le probleme c'est que ça marche sur mon ordinateur .cepandant, lorsque je l'ai testé avec un de mes amis ayant un FireWall,ça n'a pas fonctionner il n'a ien recu .


A-t-il autorisé le FW à recevoir sur le port 4444 ?


Message édité par Emmanuel Delahaye le 07-01-2006 à 19:56:26

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-01-2006 à 17:42:32    


en tt cas ,il n'a pas vraiment de bonnes connaissances en  
 
informatique.donc ça sera normal qu'il refusera d'autoriser ou de  
 
desactiver son FireWall puisqu'il a peut sur son pc .Et c'est pourquoi je  
 
demande sur le forum de m'aider à tester l'application .

Reply

Marsh Posté le 07-01-2006 à 20:53:47    

pas de testeur    !!
 
(:

Reply

Marsh Posté le 07-01-2006 à 21:41:54    

adm1n1s7ra7eur a écrit :

pas de testeur    !!
 
(:


 
L'adresse localhost (127.0.0.1) a été justement créée pour que les gens puissent tester leurs programmes réseaux... sans avoir de réseau externe (ça passe par le réseau interne de ta carte mère). T'as pas besoin d'un second testeur pour voir si ton pgm fonctionne. Si ça marche pour 127.0.0.1, ça marchera pour toutes les autres IP.
 
Au pire, si vraiment t'as des craintes, tu peux tester sur ta propre IP. A ce moment là, la trame réseau quitte ta carte mère pour aller sur la carte réseau, fait une boucle et revient. C'est comme si ça venait vraiment de l'extèrieur !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 07-01-2006 à 22:27:35    

donc ,ça marche !!!
 
merçi pour le conseil  !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed