Traiter les données efficacement (winsock)

Soyez le premier à donner votre avis sur cette source.

Vue 6 295 fois - Téléchargée 411 fois

Description

Bon voilà, ce code est très simple mais je le dépose parce que dans beaucoups de source des gens commette une grosse erreur avec Winsock (TClient, TServer).
1 - Il envoie les données sans un caractère de fin (Comme VBCrlf)
Problème :
Lorsque les datas sont envoyer rapidement elles viennent dans le même packet, donc elle ne se traite pas toute ou donne des erreurs du genre :

Pseudo> Salut !! User:bob

2 - Le code ne va traiter que la partie qui est récupéré
Problème : En envoyant une données très longue (ASCII) il est possible que sa arrive en 2 packet et que vous n'ayez pas la fin du message, ou que celui-ci n'arrive totu simplement pas.

Ce code sert a remédier a ce problème en traitait les données ligne par ligne et en prenant en compte les packets séparé et attend qu'il soit complet avant de traité.

Source / Exemple :


var
  FrmMain: TFrmMain;
  TotalAnalyse : String;
implementation

{$R *.dfm}
function TFrmMain.AnalyseData(Texte : String ; Indicateur : Integer) : String;
Var PosI : Integer; TextLine : String;
begin
        TotalAnalyse := TotalAnalyse + Texte; //TotalAnalyse := TotalAnalyse + Texte
        PosI := 1 ;
        While Pos(chr(13) + chr(10), TotalAnalyse) <> 0 Do Begin;
                TotalAnalyse := Copy(TotalAnalyse,PosI,Length(TotalAnalyse));
                TextLine := Copy(TotalAnalyse,1,Pos(chr(13) + chr(10),TotalAnalyse) - 1);
                If Length(TextLine) <> 0 Then Begin
                        //Mettez votre code ini et fier vous a TextLine;
                        
                        

                       //Fin du code;
                End;
                posI := Pos(chr(13) + chr(10), TotalAnalyse) + 2;
        End;
        Result := TotalAnalyse;
end;

Conclusion :


Pour utilisation :

AnalyseData(Socket.ReceiveText, 0)
ou
Memo1.Text := AnalyseData(Socket.ReceiveText, 0) // Va afficher le packet imcomplet (S'il y a lieux

Indicateur = Non obligatoire, c'est pour le serveur qu'il sache ou envoyer les données (Genre l'index).

Bon voilà j'espère que sa va vous plaire

PS : Tutoriaux sa va vous penser ?

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.