begin process at 2012 02 08 18:24:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

probleme avec les «Fameux Sockets»!!!


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

probleme avec les «Fameux Sockets»!!!

vendredi 25 juillet 2008 à 08:00:53 | probleme avec les «Fameux Sockets»!!!

ELCouz

Chers membres DelphiFR,

J'ai un probleme flagrant avec les composantes TServerSocket et TClientSocket.... je sais je sais épargnez moi les oh mon dieu c'est désuet , utilisez ICS ou Indy !!
Je n'ai jamais eu de probleme avec eux jusqu'a aujourd'hui, c'est tres simple , c'est leger et c'est asynchronous aussi !

Lorsque je tente d'envoyer du texte plus gros que mon buffer du socket avec SendText, le texte se fait couper (Logique non ? )!
Je travail en Non-Blocking mode, j'ai pas reelement besoin de l'autre mode!

Sachant que SendText equivaut a SendBuf(Pointer(text)^,lenght(text)) ....

Comment envoyer le texte (qui est souvent plus gros que 100 ko), jai penser a «splitter» ma string en plusieur partie et envoyer le tout ... et reassembler le tout a la reception

Apres des heures de recherche sur google je n'abouti a toujours a rien de concluant

J'ai aussi assayer de convertir ma longue string en TStringStream puis de lenvoyer avec SendStreamThenDrop, sa fonctionne partiellement (jai recu que la moitier du texte mais beaucoup plus qu'avec SendText!! ...)

ah oui et je recoit un Invalid Pointer Operation (je suis sur que cest lui qui fait planter mon texte et qui fait que jai obtenue seulement 60 % du texte)


Je vous en donne un extrait du code problematique (version avec TStringStream)

//CODE coter client lors de la reception du STREAM Texte ! (ecrit dans un fichier texte coter client, oui il i a un Create et Free pour TXTStream2 , il sont dans OnConnect et OnDisconnect (pas afficher))

procedure TForm1.ClientTXTRead(Sender: TObject; Socket: TCustomWinSocket);
var
iLen: Integer;
Bfr: Pointer;
begin
  iLen := Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    Socket.ReceiveBuf(Bfr^, iLen);
    TXTStream2.Write(Bfr^, iLen);
  finally
    FreeMem(Bfr);
  end;
end;

//CODE Coter serveur quand le client se connecte,,, automatiquement lui renvoyer la string (Form3.outtxt)

procedure TForm1.ServerTXTClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
txtStream: TStringStream;
begin

txtStream := TStringStream.Create(form3.outtxt);  //***Selon le breakpoint que jai mit ici jai un Invalid Pointer Operation qui arrive a TXTStream.Free mais cest surement a la ligne du TStringStream.Create ou SendStreamThenDrop!!!
Socket.SendStreamThenDrop(txtstream);
txtstream.Free;

end;

Es-ce que quelqun aurais une idee pour le Invalid Pointer Operation ? Et aussi pour SendText ?


Bonne journee!

Merci a vous !

Laurent
http://www.xpresstracker.com
http://www.qsc-news.com
vendredi 25 juillet 2008 à 14:43:23 | Re : probleme avec les «Fameux Sockets»!!!

Francky23012301

Membre Club
Salut Lolo,

Moi je serai passé par un TStringList et j'aurais envoyé chaque Item au client. En effet les streams coté réception n'ont pas pu être implantés par Borland. Ce qui fait que coté réception tu recois des blocs de donnés. Il peut donc y avoir des "coupures intempestives" si le socket ne recoit rien (encombrement du réseau, débit trop lent ect ect). Du reste pour transferer un fichier si on se réfere aux sources présents (Voir celui de Nono40), on informe déjà de la taille globale des données et on fait une boucle tant que la taille globale recue ne coïncide pas avec la précédente (Chose que toi tu ne fais pas ici et qui est peut etre à l'origine de ton probleme). Un text de 100 ko devrait etre envoyé en tant que fichier (à mon gout) : le TStringList est donc une bonne solution alternative (Il te suffit juste de transmettre le count au client et de faire une boucle jusqu'a que le count coté client soit le meme).

Tu parles d'un pointeur invalide : Surprenant que ca bloque au niveau d'un caractère (As tu pu l'identifier stp ?).

Essaye avec un TStringList et dis nous ce qui se passe .

A+
vendredi 25 juillet 2008 à 20:22:25 | Re : probleme avec les «Fameux Sockets»!!!

ELCouz

Merci beaucoup Francky23012301 pour ton support !

Juste une petite precision avant de commencer a retravailler sur le probleme... par TStringList, si je comprend bien , sa implique de lire ma string et a toute les CR+LF d'inserer une nouvelle donnee (ligne) dans le TStringList ?
Car bien franchement je ne voit pas aucune autre options pour entrer une longue string dans TStringList, il faut bien la couper pour qu'on aille plusieur mini string dans TStringList puis ensuite looper non ?

Oh tien en ecrivant cette «reply» j'ai penser a charger ma longue string dans un array et puis envoyer par 150-500 (donc 150 bytes-500 bytes) char a la fois dans une loop et verifier si sa c'est bien rendu car j'ai lu quelque part que SendText (et SendBuf) retourne un interger qui equivaut au nombre de char qui n'a pas pu etre envoyer....

Sur ce, je vais continuer a travailler sur le probleme , j'ai penser aussi capturer (un court video avec camtasia) le probleme car je dois t'avouer que c'est plustot dure a expliquer en mots

Merci de me corriger si je me suis gourrer !

Bonne journee,

Laurent

http://www.xpresstracker.com
http://www.qsc-news.com
vendredi 25 juillet 2008 à 21:34:12 | Re : probleme avec les «Fameux Sockets»!!!

Francky23012301

Membre Club
Pour répondre à ta question :
Tu as saisis l'idée mais regarde dans l'aide de delphi ce qui est dit sur le type TStrings. Il y a des choses qui devraient de plaire


Cette discussion est classée dans : texte, socket, jai, pointer, tstringstream


Répondre à ce message

Sujets en rapport avec ce message

Envoie de texte Socket [ par aLTsn3ak3r ] SAlut , jai fait un serveur socket et jai esayé denvoyer deux trois ligne de texte kan kelkun se connecte mais , sa nenvoi ke une et jai essayé avec A Jai besoin daide!!! [ par PatSW ] J'aimerais savoir comment lire et écrire d'une application a une autre.Ex: Dans Project1.exe, un Memo contien le texte "Allo";je veux pouvoir lir ce t Socket data et connection[] [ par mickeydisn ] Voila Deux petit question.. tout d'abor quand pour utiliser le pointer socket.datapour un entier socket.data := pointer(i); probleme socket [ par yazidou27 ] bonjour; je suis entrein de realiser une apli pour chat mai jai u un probleme jai 1 serveur et 3 client je veux que je repend en priver server ---- programmation [ par nmacines ] bonjour je souhaite savoir svp comment diviser deux champs texte en faite je souhaite faire la division de deux champs notes et coef dans le compos [INDY 9] IdFTP : Gestion d'erreurs impossible ! [ par kabbabi ] Bonjour, Après avoir cherché auprès de mon ami Google des moyens pour gérer les erreurs du composant IdFTP d'Indy, j'ai trouvé deux solutions. L'une cnetrage texte dans DBGrid et DBEdit [ par yvessimon ] Bonjoure, [^^confus2]Comment positionner le texte à droit (ou gauche) d'une cellule DBGrid ou d'un DBEdit ? [^^clinoeil1] Merci yvessimon PB Déchargement DLL avec Socket [ par zawab ] Bonjour à tous, J'ai écris une dll (Delphi6), qui permet de créer une connexion socket sur un serveur et d'envoyer et recevoir des messages. elle cont jai un probleme avec spinedit [ par mourad555 ] [color=blue]comment faire communiquer entre spinedit et radiobutton pour deffilé les radio buttons SVP Merci [/color][^^confus2][img][img]C:\RESIST. Incruter du texte sur une vidéo en acquisition en direct [ par Lobb88 ] Bonjour, je vais préciser mon titre pour que vous ayez plus de détail. Je cherche donc un moyen d'incruster un texte qui est généré dans un .txt auto


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,574 sec (3)

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