Bastard60
Messages postés3Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention23 août 2005
-
19 août 2005 à 11:39
Bastard60
Messages postés3Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention23 août 2005
-
23 août 2005 à 08:11
Salutation belle compagnie, ça faisait un petit moment que j'avait pas ecrit pour pleurer l'aide d'eminences grises, plus grises que moi.
Voila j'ai une petite appli client serveur via ClientSocket et ServerSocket, Je veux recuperer un fichier xml qui contient les info d'une requète sql.
je passe donc par stream. transformant en flu mon Xml et l'envoyant via :
ServerSocket1.Socket.Connections[0].SendStream(Stream);
voila le code de l'envoi;
code
<HR color=#ffffff SIZE=1>
procedure TFormServeur.EnvoyerClick(Sender: TObject);
Var FileStr:TFileStream;
Stream:TMemoryStream;
begin
ClientDataSetNoms.SaveToFile('../Monxml.xml');
HKStreams.ClearStreams;
FileStr:=TFileStream.Create('../Monxml.xml', fmOpenRead);
Try
HKStreams.AddStream('XML', FileStr);
Finally
FileStr.Free;
End;
Stream:=TMemoryStream.Create;
HKStreams.SaveToStream(Stream);
// on balance le stream au client
ServerSocket1.Socket.Connections[0].SendStream(Stream);
end;
<HR color=#808080 SIZE=1>
coté client j'ai recuperer un code pour recuperer le stream (on a pas idée de faire des SendStream et pas de ReciveStream )
mais le probleme c'est que le le client ne recoit rien du tout! il ne rentre pas dans la procedure :
code
<HR color=#ffffff SIZE=1>
procedure TFormClient.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var tempstream : TMemoryStream;
Buffer : Pointer;
begin
while Socket.ReceiveLength > 0 do begin
Buffer := AllocMem(Socket.ReceiveLength);
try
Socket.ReceiveBuf(Buffer^, Socket.ReceiveLength);
tempstream.Write(Buffer^, StrLen(Buffer));
finally
FreeMem(Buffer);
end;
tempstream.Seek(0, soFromBeginning);
ClientDataSet1.LoadFromStream(tempstream);
end;
end;
<HR color=#808080 SIZE=1>
voial si vous avez des suggestions je suis tout ouïe
Bastard60
Messages postés3Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention23 août 2005 23 août 2005 à 08:11
j'ai finalement trouver pourquoi le client ne voulait rien entendre!
c'est juste car le serveur n'envoyait rien!
en effet j'avait oublié un petit : Stream.Position := 0; du coté serveur.
toute fois les probleme c'etant suivis par la suite, je passe finalement par les composant indi. bien plus facile a utilisé.
(les pb en question sont en rapport avec :
while Socket.ReceiveLength > 0 do begin
Buffer := AllocMem(Socket.ReceiveLength);
la fonction renvoi une valeur approxiamative et coupe le stream en deux partie! pas pratique du tout ^_^. )
neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 août 2008 19 août 2005 à 16:40
Etant donné que tu envoi et recoi un fichier xml pourquoi tu n'utiliserai pas les wrtieln et les readLn qui sont concus pour envoyer et recevoir des lignes ?
Bastard60
Messages postés3Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention23 août 2005 22 août 2005 à 08:21
Le probleme c'est que bien que je l'ai pas encore implementé, le contenu du xml sera cripté et compressé via HKStream. dans ce cas il ne s'agit plus d'un texte en lui meme.
Mais ce que je trouve etrange c'eest vraiment que le client ne recoive rien, avec un simple Sendtext(montext). il reçois parfaitement. il ne s'agirais pas d'une erruer dans mon code? j'aimerai savoir si quelqun a deja envoyer des streams via serveursocket et Clientsocket, qu'il me poste le code pour que je vois ou ça va pas ^_^.
mici d'avance.