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 :

streaming : TidTCPServer/TidTCPClient


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par défaut streaming : TidTCPServer/TidTCPClient
    salut à toutes et tous,

    a l'aide du composant :
    TidTCPClient nomé tcp dans le code sendstr ( code d'envoie)
    TidTCPServer nomé tcp dans le code sendstr ( code reception)

    je ne parvient pas a s'avoir qu'elle est le poste qui envoie !!!
    au depart c'etait juste d'un poste vers un autre, mais je voudrai faire en sorte
    que je puisse afficher les images (printscreen) de tout les ecrans du reseau sur mon ecran serveur. (programmation dynamique)

    un seul detail me manque c'est la provenance !!
    je ne veux pas creer un composant TidTCPServer pour chaque poste client dans mon programme serveur, car je ne connait pas d'avance le nombre de poste client, meme si je sais que c'est un maximum de 255 pc !

    avec les composants socket c'est simple mais j'ai pas pu resussir a envoier un stream !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //reception socket server et client
    void __fastcall TForm1::SocketRead(TObject *Sender,
    TCustomWinSocket *Socket)
    en lisant les valeur de Socket on obtient tout les info de l'expediteur

    mais avec ca j'ai aucune info !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //reception TidTCPServer
    void __fastcall TForm8::tcpExecute(TIdPeerThread *AThread)
    qui a une idée ?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    //*****************************************
    // CODE D ENVOIE
    //*****************************************
     
    void TForm1::sendstr()
    {
    TMemoryStream *stream = new TMemoryStream();
    TJPEGImage *jpg = new TJPEGImage();
    Graphics :: TBitmap *bmp = new Graphics :: TBitmap();
    TRect *rect = new TRect();
    TPicture *img = new TPicture();
     
    img->Bitmap->Height = Screen->Height;
    img->Bitmap->Width = Screen->Width;
     
    int scrw = Screen->Width, scrh = Screen->Height;
     
    HWND hwnd = GetDesktopWindow();
    HDC hDC = GetDC(hwnd);
     
    BitBlt(img->Bitmap->Canvas->Handle,0,0,scrw,scrh,hDC,0,0,SRCCOPY);
     
    try
    {
    jpg->Assign(img->Bitmap);
    jpg->CompressionQuality = 15; // qualitie d'image voire propriéte 
    bmp->Width = jpg->Width -50;
    bmp->Height = jpg->Height -50;
    rect->Left = 0;
    rect->Top = 0;
    rect->Right = bmp->Width-1;
    rect->Bottom = bmp->Height-1;
    bmp->Canvas->StretchDraw(*rect,jpg);
    jpg->Assign(bmp);
    jpg->SaveToStream(stream);
    jpg->Free();
    bmp->Free();
    }
    catch (...){}
     
    try
    {
    tcp->OpenWriteBuffer();
    tcp->WriteStream(stream);
    tcp->CloseWriteBuffer();
    stream->Free();
    tcp->Disconnect();
    }
    catch(...){}
     
    }
     
    //*****************************************
    // CODE RECEPTION
    //*****************************************
     
    void __fastcall TForm8::tcpExecute(TIdPeerThread *AThread)
    {
    TMemoryStream *stream = new TMemoryStream();
    TJPEGImage *jpg = new TJPEGImage();
     
    AThread->Connection->ReadStream(stream, -1, true);
    stream->Position =0;
    jpg->LoadFromStream(stream);
    Form5->espion->Picture->Graphic = jpg;
     
    stream->Free();
    jpg->Free();
     
    //******************************
    grace a cette methode j'ai pu modifier mon ancien code qui lisait le fichier en binaire et que j'envoyais trame par trame pour le reconstituer au serveur.
    parfois l'image etait floue et c'etait lent pour une parfaite qualité

    ancien code quant meme :
    il permet d'envoyer n'importe qu'elle un fichier d'un pc a un autre via socket
    en lisant le contenu du fichier et l'envoi de cette lecture.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    //lecture binaire et envoie a l'aide d'un timer
    //**********************************
    void __fastcall TForm1::FCTTimer(TObject *Sender)
    {
    static int temp=0;
     
    // On envoi le fichier tant qu'on est pas a la fin
        if(!feof(FichierEnvoi))
        {
    info_send->Caption = "Envoi en cours....";
     
    memset(buf2, 0, SIZE); // vider le vecteur buf2
     
    fread(buf2, 1, SIZE, FichierEnvoi); lecture du fichier et copie dans buf2
     
    sec = (sec + FCT->Interval);
     
    if(sec==1000) { sec=0; min++; }
     
    if(min==60) { her++; min=0; }
     
    timer->Caption = AnsiString(her) + ":" + AnsiString(min);// + ":" + AnsiString(sec);
     
    Client->Socket->SendBuf(buf2,SIZE);
     
    }
    else
    { FCT->Enabled = false;
    temp = 0; sec=min=her=0;
    fclose(FichierEnvoi);
    Client->Socket->SendBuf("End_File",10);
    info_send->Caption = "Envoi Terminé";
    }
     
    }
     
    //*************************
    //*************************
     
    //reception fichier via socket
    void __fastcall TForm8::SocketClientRead(TObject *Sender,
    TCustomWinSocket *Socket)
    {
    memset(buf, 0, 2048);
    Socket->ReceiveBuf(buf,2048); // message envoyé par un pc distant
     
    if( strstr(buf,"Start_File")!=NULL ) // Start_File == code debut d'un envoi 
    { DeleteFile(chemin.c_str()); // efface de l'ancier fichier recu
    Form5->WAIT->Visible=true; // image indiquant qu'on recoit qqch
    char *ptr; ptr = strtok(buf,"-");// selon mon protocol d'envoi
    chemin = "c:\\" + AnsiString(ptr);// nom du fichier expediteur
    FichierRecu = fopen(chemin.c_str(), "ab");// ecriture binaire
    return;
    }
     
    if( strcmp(buf,"End_File")!=0 ) // tanqu'on recoi pas le code de fin 
    { if(FichierRecu!=NULL) 
    fwrite(buf, 1, 2048,FichierRecu); // ecriture dans un fichier en bianire
    }
    else
    { fclose(FichierRecu);
    Form5->WAIT->Visible=false; // contenu du ficher envoye termine
    }
     
     
    //*************************
    comment mettre des petit projet sur ce site ? si ca interresse qqn ?

    merci d'avance
    @+

  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
    Citation Envoyé par Bily.sdi
    comment mettre des petit projet sur ce site ? si ca interresse qqn ?
    En postant ton projet, avec expliquation,... sur le forum Contribuez de la rubrique concerné, ici pour C/C++

Discussions similaires

  1. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  2. [BLOB]Enreg Stream dans Field
    Par sbeu dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/03/2004, 16h06
  3. Streaming video sous Linux
    Par freeshman dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 03/01/2004, 17h17
  4. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

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