begin process at 2012 05 30 11:16:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Reception de fichiers par socket


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

Reception de fichiers par socket

jeudi 28 août 2003 à 16:48:45 | Reception de fichiers par socket

guiguikun

Quelqu'un peut-il me dire pourquoi est-ce qu'avec le code ci-dessous je suis obligé d'envoyer des packets d'1 octet pour que le fichier soit complet ?

Si j'envois des packets d'1Ko par exemple, le fichier qui faisait initialement ~ 500Ko ne fait plus que 30Ko après l'upload.

Note : Si j'envoi des packets de 20Octets par exemple, j'obtient 1x/2 la bonne taille du fichier après l'upload.

Est-ce que mon client envoit trop vite ?
Que passa ?


//
// (EVENT) Lorsqu'il recoit qqchose
//
void __fastcall GParse::Recevoir(TCustomWinSocket *sock)
{

Socket = sock;
GPacket *gp = new GPacket;
gp->taille = sock->ReceiveLength();
gp->ptr = new char[gp->taille];
sock->ReceiveBuf(gp->ptr,gp->taille);
AnalyserPacket(gp);
delete [] gp->ptr;
delete gp;
}


//
// Analyse du packet.
// -------------------
// Ici on a recu un nouveau packet, on va l'analyser
//
void __fastcall GParse::AnalyserPacket(GPacket *gp)
{
// oin clean la string
if (!is_file) ClearPacket(gp);
// on vérifie si on recoit un flag de commencement de fichier.
if ( !strncmp(gp->ptr, RECV_FILETAG , strlen(RECV_FILETAG) ) ) {
is_file = true;
memset(filename,0,MAX_FILELENGTH);
strcpy(filename, Right(gp->ptr, strlen(gp->ptr) - strlen(RECV_FILETAG)) );
ClearFile(filename);
fichier->open(filename,ios::out|ios::binary);
return;
}
if ( !strncmp(gp->ptr, EOFT , strlen(EOFT) ) ) {
is_file = false;
fichier->close();
return;
}

// on write ou non sur le fichier.
is_file ? Recevoir_Fichier(gp) : Parse_Packet(gp);
}

//
// Si on est en mode fichier, cette fonction est called
// pour mettre en fichier ce qu'il recoit.
//
void __fastcall GParse::Recevoir_Fichier(GPacket *gp)
{
fichier->write(gp->ptr,gp->taille);
}


//
// si c pas un fichier on call cette fonction pour analyser le message du packet
//
void __fastcall GParse::Parse_Packet(GPacket *gp)
{
if (!strncmp(gp->ptr,RECV_MSGBOX,strlen(RECV_MSGBOX)))
MessageBox(NULL,Right(gp->ptr,strlen(gp->ptr)-strlen(MSGBOX_TITLE)),MSGBOX_TITLE,MB_OK);
}


jeudi 28 août 2003 à 17:23:11 | Re : Reception de fichiers par socket

guiguikun

voici le code, en plus visible j'espere :




//
// (EVENT) Lorsqu'il recoit qqchose
//
void __fastcall GParse::Recevoir(TCustomWinSocket *sock)
{

Socket = sock;
GPacket *gp = new GPacket;
gp->taille = sock->ReceiveLength();
gp->ptr = new char[gp->taille];
sock->ReceiveBuf(gp->ptr,gp->taille);
AnalyserPacket(gp);
delete [] gp->ptr;
delete gp;



}


//
// Analyse du packet.
// -------------------
// Ici on a recu un nouveau packet, on va l'analyser
//
void __fastcall GParse::AnalyserPacket(GPacket *gp)
{
// oin clean la string
if (!is_file) ClearPacket(gp);
// on vérifie si on recoit un flag de commencement de fichier.
if ( !strncmp(gp->ptr, RECV_FILETAG , strlen(RECV_FILETAG) ) ) {
is_file = true;
memset(filename,0,MAX_FILELENGTH);
strcpy(filename, Right(gp->ptr, strlen(gp->ptr) - strlen(RECV_FILETAG)) );
ClearFile(filename);
fichier->open(filename,ios::out|ios::binary);
return;
}
if ( !strncmp(gp->ptr, EOFT , strlen(EOFT) ) ) {
is_file = false;
fichier->close();
return;
}

// on write ou non sur le fichier.
is_file ? Recevoir_Fichier(gp) : Parse_Packet(gp);
}

//
// Si on est en mode fichier, cette fonction est called
// pour mettre en fichier ce qu'il recoit.
//
void __fastcall GParse::Recevoir_Fichier(GPacket *gp)
{
fichier->write(gp->ptr,gp->taille);
}


//
// si c pas un fichier on call cette fonction pour analyser le message du packet
//
void __fastcall GParse::Parse_Packet(GPacket *gp)
{
if (!strncmp(gp->ptr,RECV_MSGBOX,strlen(RECV_MSGBOX)))
MessageBox(NULL,Right(gp->ptr,strlen(gp->ptr)-strlen(MSGBOX_TITLE)),MSGBOX_TITLE,MB_OK);
}








-------------------------------
Réponse au message :
-------------------------------

> Quelqu'un peut-il me dire pourquoi est-ce qu'avec le code ci-dessous je suis obligé d'envoyer des packets d'1 octet pour que le fichier soit complet ?
>
> Si j'envois des packets d'1Ko par exemple, le fichier qui faisait initialement ~ 500Ko ne fait plus que 30Ko après l'upload.
>
> Note : Si j'envoi des packets de 20Octets par exemple, j'obtient 1x/2 la bonne taille du fichier après l'upload.
>
> Est-ce que mon client envoit trop vite ?
> Que passa ?
>
>
> //
> // (EVENT) Lorsqu'il recoit qqchose
> //
> void __fastcall GParse::Recevoir(TCustomWinSocket *sock)
> {
>
> Socket = sock;
> GPacket *gp = new GPacket;
> gp->taille = sock->ReceiveLength();
> gp->ptr = new char[gp->taille];
> sock->ReceiveBuf(gp->ptr,gp->taille);
> AnalyserPacket(gp);
> delete [] gp->ptr;
> delete gp;
> }
>
>
> //
> // Analyse du packet.
> // -------------------
> // Ici on a recu un nouveau packet, on va l'analyser
> //
> void __fastcall GParse::AnalyserPacket(GPacket *gp)
> {
> // oin clean la string
> if (!is_file) ClearPacket(gp);
> // on vérifie si on recoit un flag de commencement de fichier.
> if ( !strncmp(gp->ptr, RECV_FILETAG , strlen(RECV_FILETAG) ) ) {
> is_file = true;
> memset(filename,0,MAX_FILELENGTH);
> strcpy(filename, Right(gp->ptr, strlen(gp->ptr) - strlen(RECV_FILETAG)) );
> ClearFile(filename);
> fichier->open(filename,ios::out|ios::binary);
> return;
> }
> if ( !strncmp(gp->ptr, EOFT , strlen(EOFT) ) ) {
> is_file = false;
> fichier->close();
> return;
> }
>
> // on write ou non sur le fichier.
> is_file ? Recevoir_Fichier(gp) : Parse_Packet(gp);
> }
>
> //
> // Si on est en mode fichier, cette fonction est called
> // pour mettre en fichier ce qu'il recoit.
> //
> void __fastcall GParse::Recevoir_Fichier(GPacket *gp)
> {
> fichier->write(gp->ptr,gp->taille);
> }
>
>
> //
> // si c pas un fichier on call cette fonction pour analyser le message du packet
> //
> void __fastcall GParse::Parse_Packet(GPacket *gp)
> {
> if (!strncmp(gp->ptr,RECV_MSGBOX,strlen(RECV_MSGBOX)))
> MessageBox(NULL,Right(gp->ptr,strlen(gp->ptr)-strlen(MSGBOX_TITLE)),MSGBOX_TITLE,MB_OK);
> }
>
>
>



Cette discussion est classée dans : fichier, taille, ptr, strlen, gp


Répondre à ce message

Sujets en rapport avec ce message

Lire la taille d'un fichier avec la DTA [ par metman ] Comment pouvons-nous avoir la taille d'un fichier a partir des octets 26 27 28 29 de la DTA ?Intéruption 21hfonction 4foctect 26 - 27 = mot faible de taille du chaine (+vicieux kon le croit....) [ par Xs ] salut !!a peu rpes tout le monde sait qu'on se sert de strlen(...) ?bon et bien moi, je veux pas mesurer sa taille en caracteres (strlen), mais sa tai La valeur 26=0x1A pose un problème de lecture de fichier [ par sengr ] Salut!Jsuis en stage et jsuis pas un AS du dévelopement et ca URGE!J'ai rencontré un BIG problème : le coup du de la valeur 26=0x1A avec les fonctions Taille de ma structure [ par crocejf2000 ] Salut a tous, J'ai un tres gros probleme qui me bloque toute mon avancé dans mon prog : j'ai une structure : typedef struct{ unsigned short Locate; ch nombre de caractère [ par mig73 ] salut à tousje suis sous visual c++.netj'ai utilisé la fonction suivante:CFile::GetLenght qui me donne la taille en octet du fichier que je lisA parti recherche fichiers executables et comparaisons [ par limsa033 ] Bonsoir,je cherche à lister tous les fichiers executables d(un disque dur ainsi que leur principales caractéristiques(nom,chemin et taille et date de Taille d'un fichier [ par mimieivd ] Hello !Pourriez vous expliquer à une bande de novice comment faire pour avoir la taille d'un fichier svp ???merci la compagnie ? Exploitation de fichier en C ?!?!?! [ par GazGaz ] lu allalors voila le truc c'est que je voudrais aller chercher des infos dans un fichier qui est structuré de la meme maniere lignes apres lignes. Je manipulation fichier texte [ par bencholl ] I / Utilisation de fichiers texteLe fichier "Etud_2002.don" comporte des lignes ainsi structurées (le caractère ';' est utilisé comme séparateur) : NO pb de taille de fichier avec dev c++ [ par Freeman2222 ] Bonjour ! Je débute en cpp et j'ai pris dev-cpp. J'ai fait une petit prog d'une vingtaine de lignes avec comme seule include iostream. Le pb c'est qu'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 0,484 sec (4)

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