Probleme de socket ? ou de mise en place dans un fichier ?

Probleme de socket ? ou de mise en place dans un fichier ? - C - Programmation

Marsh Posté le 16-08-2006 à 17:59:43    

Bonjour,
 
Voici mon code source qui doit me permettre de récuperer des données d'un hote mais mon probleme est que quand j'envoi des images par exemple elle ne sont pas comme l'originale j'obtient des décalages...
 
Voici mon code :
 

Code :
  1. // Declaration de variables
  2.     WSADATA initialisation_win32;            // Variable permettant de récupérer la structure d'information sur l'initialisation
  3.     int erreur;                                // Variable permettant de récupérer la valeur de retour des fonctions utilisées
  4.     int taille;
  5.     char buffer[1024];                        // Tampon contenant les données reçues ou envoyées
  6.     SOCKET id_de_la_socket;                    // Identifiant de la socket
  7.     SOCKET transf_sock;
  8.     SOCKADDR_IN information_sur_la_source;    // Déclaration de la structure des informations lié à l'écoute
  9.     FILE *file2;
  10.     int nbr_recv,i,j;
  11.     int z=0;
  12.     int decalage=0;
  13.  
  14. void main(int argc, char* argv[])
  15. {
  16.         // Initialisation de Winsock
  17.     erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
  18.     
  19.     // Ouverture d'une Socket
  20.     id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
  21.     
  22.     //  Lire la socket à une ip et un port d'écoute
  23.     information_sur_la_source.sin_family=AF_INET;    
  24.     information_sur_la_source.sin_addr.s_addr=INADDR_ANY; // Ecoute sur toutes les IP locales
  25.     information_sur_la_source.sin_port=htons(8686); // Ecoute sur le port 8686
  26.  
  27.     erreur=bind(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source));
  28.     erreur = listen(id_de_la_socket,1);
  29.     printf("\nlisten" );
  30.     transf_sock = accept(id_de_la_socket,(struct sockaddr*)&information_sur_la_source.sin_addr,NULL);
  31.     printf("\naccept" );
  32.     
  33.     nbr_recv = recv(transf_sock,(char *) buffer,6,NULL);
  34.     taille = StrToInt(buffer);
  35.     
  36.  
  37.     printf("%d",taille);
  38.  
  39.     while(z<taille)
  40.     {
  41.         nbr_recv = recv(transf_sock,(char *)buffer,1024,NULL);
  42.         printf("\n nbr_recv = %d", nbr_recv);
  43.         
  44.         file2 = fopen("test","w+" );
  45.         fseek(file2,decalage,0);
  46.         for(i=0; i<nbr_recv-1; i++)
  47.             fputc((char)buffer[i], file2);
  48.         
  49.         decalage = decalage + 1023;
  50.         z = z + 1024;
  51.     }
  52.     system("pause" );
  53. }


 
Voyez vous une erreur ?
 
Par contre, la récéption de la taille se fait sans aucun probleme!
 
Merci
Johnson

Reply

Marsh Posté le 16-08-2006 à 17:59:43   

Reply

Marsh Posté le 17-08-2006 à 22:33:04    

En regardant vite fait l'algo, tu est sur de bien recevoir les 1024 derniers octets ?
Et tes variables tu peux (dois) les mettre dans ta fonction, il n'y a aucune utilité à les déclarer globales

Reply

Sujets relatifs:

Leave a Replay

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