IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

[Socket] SendBuff avec BMP


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut [Socket] SendBuff avec BMP
    Salut.

    Je voudrais transmettre un fichier image (bmp) avec les composants Tsocketserveur et TSocketclient.
    Mon problème vient d'une vulgaire fenêtre windows qui s'ouvre à l'execution de Button2Click
    Voici mon code serveur (envoi du fichier) :

    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
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       ServerSocket->Port = 10000;
       ServerSocket->Open();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::charge_image(TObject *Sender)
    {
     
       AnsiString chemin_absolu;
       OpenPictureDialog1->Execute();
       //Form1->TImage1->Picture->LoadFromFile("mon_image.jpg");
       Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
     
     
    }
     
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     
                            //envoi de l'image en créant un buffer (zone memoire)
                            TMemoryStream *stream = new TMemoryStream();
                            Image1->Picture->Bitmap->SaveToStream(stream);
                            ServerSocket->Socket->SendBuf(stream->Memory, stream->Size);
                            delete stream;
     
    }

    Et voici la reception du client (une partie du code) :

    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
    void __fastcall TForm1::ClientSocketRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
     
         //recoi l'image
         TMemoryStream *stream = new TMemoryStream();
         char Buffer[500000];
         int Count;
         while (Count = ClientSocket->Socket->ReceiveBuf(Buffer, sizeof(Buffer)) != -1)
         {
                // stream->Write(Buffer, sizeof(Buffer));
                 stream->Write(Buffer, Count);
                 Sleep(1000);
         }
         stream->Position = 0;
         Image1->Picture->Bitmap->LoadFromStream(stream);
         delete stream;
    }
    Merci

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Si les données sont trop longue, tu n'arrivera pas à envoyé ton fichier, il me semble qu'il faut que tu ton fichier en plusieurs partie pour que le composant socket réussisse à le transférer.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    En moyenne 90 Ko, je doute que ce genre de fichiers est lourd.

    En plus le programme bloque en niveau de l'envoi du fichier (et non à la réception).

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Vu le message d'erreur, c'est que tu as une erreur de connexion, cherche peut être de ce côté la.

    En regardant de plus près ton code je me suis aperçu que cette ligne n'est pas correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServerSocket->Socket->SendBuf(stream->Memory, stream->Size);
    il faut que tu sache à quel client tu veut envoyer, et le choisir parmi tes connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServerSocket->Socket->Connections[idDeLaConnexion]->SendBuf(stream->Memory, stream->Size);

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Déjà mieux.
    Le fichier passe l'étape de l'émission.

    L'erreur vient de la réception maintenant :
    stream read error
    J'en ai aucune idée.

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Tu as essayé de débuger, pour voir si c'est la reception ou la reconstruction de l'image ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Encore une étape passé.

    Les fichiers de 90 Ko ne passent pas.
    Par contre celui d'environ 10 Ko fonctionne. C'est bien envoyé et bien reçu (seulement l'image).

    Mais quand j'envoie le texte et l'image, ça ne fonctionne plus (juste le texte est envoyé).

    J'essayerai de les envoyer indépendamment.
    Il manquait bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ServerSocket->Socket->Connections[recuperer_indice_client()]->SendBuf(stream->Memory, stream->Size);
    Puis j'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stream->Write(Buffer, Count);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     stream->Write(Buffer, sizeof(Buffer));
    Merci à toi.

    Je mets le post en résolu mais si je constate encore des problemes, je le réouvirai.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [socket] Probleme avec connect
    Par sorry60 dans le forum Réseau
    Réponses: 12
    Dernier message: 16/11/2005, 22h01
  2. [socket] Problème avec les options
    Par gangsoleil dans le forum Développement
    Réponses: 3
    Dernier message: 13/07/2005, 13h11
  3. [TP]Gestion des images bmp avec BMP.TPU
    Par Gabi dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 14/05/2004, 23h20
  4. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49
  5. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo