begin process at 2012 05 29 06:13:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Fiabiliser transfert par socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fiabiliser transfert par socket

vendredi 28 janvier 2005 à 18:53:06 | Fiabiliser transfert par socket

masseur

Salut.
Je vais vous expliquer mon petit problème.
Je crée un client et un serveur.
Des que le serveur recoit une demande il envoie un fichier en utilisant un thread vers le client.
Seulement quand je teste sur mon PC tout se passe bien.

Dès que je teste les deux programmes sur deux ordis différents du réseau le client recoit le fichier mais l'image est toute décalée (elle ressemble plus à rien).
Pourquoi un tel phénomène quand on test sur le réseau et le net?

Comment y remédier.



char buffer[512];
 struct sockaddr_in sin;
 int i, r;
 int size = sizeof(struct sockaddr_in);
 sin.sin_family = AF_INET;
 sin.sin_port = htons(50);
 sin.sin_addr.s_addr = inet_addr("127.0.0.1");

 if(WSAStartup(0x101, &w) == 0)
   {
    if((sock_client = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
      {
       if(connect(sock_client, (struct sockaddr *)&sin, size) == 0)
         {
          //création fichier sur le disque
           fichier=fopen("1.bmp","w+b");
    if(fichier == NULL)
    {
       
        exit(1);
    }
       
           //recevoir taille
           recv(sock_client,(char *)&taille,sizeof(taille),0);   

           //tant que taille>taille_buf
           temp=taille;
          while(temp>TAILLE_BUF)
          {
           //recoit partie fichier
            recv(sock_client,transfert, TAILLE_BUF, 0);
            //on ecrit le contenu dans le fichier
             fwrite(transfert,1, TAILLE_BUF, fichier);
            temp=temp-TAILLE_BUF;
          }
     
           recv(sock_client, transfert, temp, 0);
           fwrite(transfert,1, TAILLE_BUF, fichier);

           fclose (fichier);
          closesocket (sock_client);

           
         }
       else MessageBox(0, "Erreur connexion  Serveur !", NULL, MB_ICONERROR);
      }
    else MessageBox(0, "Erreur  création Socket Client !", NULL, MB_ICONERROR);
   }
 else MessageBox(0, "erreur WSAStartup() !", NULL, MB_ICONERROR);
}


Ceci marche parfaitement sur mon PC mais pas sur le réseau ce qui est le principe des clients serveurs snifff.
dimanche 30 janvier 2005 à 09:37:02 | Re : Fiabiliser transfert par socket

yoyo269

Membre Club
Salut masseur,

je peux te proposer une solution, celle que j'utilise, mais certainement pas la meilleure, car elle rend le débit lent voir très lent (par internet 5 Ko/s).
En fait il faut qu'à chaque fois que tu reçois, tu envoies qq chose au serveur pour lui dire que c'est bon et qu'il peut envoyer à son tour.
Dans le même temps, il faut que ton serveur attende la réponse comme quoi il peut envoyer autre chose, cela revient à envoyer attendre la réponse, envoyer, attendre la réponse et ainsi de suite.
J'espère avoir été clair.

Si t'as des questions, je suis là.

YOYO, @+.
YOYO
dimanche 30 janvier 2005 à 10:09:34 | Re : Fiabiliser transfert par socket

masseur

Ben les fichiers à transmettre peuvent atteindre plusieurs Mo donc cette solution ne peux etre envisageable.
Merci quand meme.
dimanche 30 janvier 2005 à 16:42:02 | Re : Fiabiliser transfert par socket

simtiers

Pour un décalage, je dirais plutot  que le pb vient de la lecture ou de l'ecriture du fichier...
Verifie bien tes fonctions.
Sinon, la variable transfert, c'est quoi un tableau de char ou un pointeur
( char transfert[TAILLE_BUF] ou char* transfert = (char*)malloc(TAILLE_BUF) ) ?
dimanche 30 janvier 2005 à 17:22:40 | Re : Fiabiliser transfert par socket

aardman

Membre Club

Salut,

yoyo269: ce que tu fais (envois de message et attente d'un accusé de reception) ne sert a rien car ce systeme est déja implementé au niveau TCP.

dimanche 30 janvier 2005 à 18:13:33 | Re : Fiabiliser transfert par socket

masseur

Transfert c'est ceci : char transfert[TAILLE_BUF];

Mais bon ce qui est bizarre c'est que le programme marche si je teste sur mon PC mais dès que c'est en réseau ca amrche plus.

dimanche 30 janvier 2005 à 18:46:41 | Re : Fiabiliser transfert par socket

simtiers

T'as essayé en inversant les roles (serveur devient client et vice-versa)

Si transfert est un tableau,; alor j'écrirais plutot, &transfert au lieu de transfert...
dimanche 30 janvier 2005 à 19:04:34 | Re : Fiabiliser transfert par socket

yoyo269

Membre Club
Pour Aardman : si ce que je fais est pas bon, alors tu fais parce que ça m'intéresse bcp.

YOYO, @+.
YOYO
dimanche 30 janvier 2005 à 19:06:40 | Re : Fiabiliser transfert par socket

masseur

J'avais deja essayé.
Le problème ne vient pas de la.
Ca commence à etre saoulant.
Ca marche sur un PC mais pas sur le réseau.
Vive microsoft.
Mon prof m'a dit qu'il avait galéré aussi car il avait le meme probleme.
Mais bon que faire?
Il m'avait parlé d'utiliser le select mais bon je vois pas en quoi ca pourrait resoudre le probleme.

Je pense plutot que les données doivent se mélanger car la taille recue est bonne.
dimanche 30 janvier 2005 à 19:13:28 | Re : Fiabiliser transfert par socket

aardman

Membre Club
Salut,
yoyo269: ben tu n'a rien a faire, une boucle avec des send() qui coté qui emet, et une boucle avec des recv() du coté qui recoit. Il faut aussi tester la valeur de retour de send(): si elle est differente de 0 ou -1 tu peux etre sur que le client a bien recu les données que tu lui as envoyé.
Tout ca est valable pour les sockets bloquants, en utilisant TCP biensur.

1 2

Cette discussion est classée dans : fichier, taille, client, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

Probleme de Client Serveur [ par Krox68 ] voila jaimerais faire un programme client qui puisse se connecter a ce serveur : #include void main(){ WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WS PROBLEME CLIENT SERVER [ par zzzzzz ] Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(je sais pas comment faire en sorte que transfert de fichier sous MFC [ par seito ] [size=5] seito [/size]bonjours,j'aimerais déveloper une application de transfert de fichier sous MFC avec Visual C++ 6.le code que j'ai conçus marche [serveur]telecharger fichier [ par lombredudragon ] Avec les socket je debute et j'aimerais me faire un serveur en c ou c++ ou kan on se connect au port 23 par telnet on recoit automatiquement un fichie client serveur [ par elanspeech ] Bonjour,Je suis en train de programmer un petit client serveur en C pour windows avec dev-c++. J'obtiens l'erreur suivante a la compilation : D:\DEV-C erreur completement inexplicable ! [ par anonyme_man_in_this_world ] salut  ! lorsque j' execute les deux programmes sur mon pc, tout marche bien ,meme si je valide l'ip internet . Mais lorsque je les ai testé avec mes Taille d'un fichier serveur/client [ par doberman7578 ] Salut, Coté serveur: pour envoyer un fichier, il faut dabord envoyer une structure qui contient les infos du fichier (taille). Ensuite on ouvre le fic Client serveur [ par fanch314 ] Je que le serveur et le client échange par internet.Le serveur ne voit pas de client connectéEt le buffer du client contient nimporte quoi.En gros ils Boucle de connection client TCP [ par ssmint ] Bonjour à tous,Mon dernier souci en date est de pouvoir créer une un client qui essaie de se connecter toutes les secondes.Je fais donc une boucle ave Problème d'IP Client avec les winsock [ par Cphil51 ] Boujour a tous.Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales