deaphrothe
Messages postés10Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention 8 août 2004
-
7 août 2004 à 18:49
preti
Messages postés53Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 7 septembre 2006
-
16 août 2004 à 11:04
bon voila je veux faire un outil d'administration dans le style de vnc, je prend donc un screen sur la partie serveur, je la stoque dans un stream, j'envois le stream par socket, je récupere le stream sur le client et je recharge l'image qui es contenue dans le stream
je n'ai aucune erreur lors de la compilation mais lors des teste, j'ai des erreur mémoire. voici mon code :
coté serveur :
définition de toutes les variables suivit de :
TempStream :=TMemoryStream.Create;
ImageBureau.Bitmap.Width := Screen.Width; ImageBureau.Bitmap.Height := Screen.Height;
BitBlt(ImageBureau.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
GetDC(GetDesktopWindow),0,0,SrcCopy);
ImageBureau.Bitmap.SaveToStream(TempStream);
serversocket1.Socket.SendStream(TempStream);
et coté client :
définition de toutes les variables suivit de :
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);
ImageBureau.Bitmap.LoadFromStream(tempstream);
Image5.Picture.Bitmap:=ImageBureau.Bitmap;
end;
et le message d'erreur ce produit actuellement sur le serveur et est le suivant :
Le projet project1.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'acces à l'adresse 0041EF23 dans le module 'project1.exe'. Lecture de l'adresse 0000000C'. Processus stoppé. Utilisez pas-à-pas ou executer pour continuer.
deaphrothe
Messages postés10Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention 8 août 2004 8 août 2004 à 10:55
j'ai aussi un autre probleme, comme dans vnc, si le serveur l'autorise, le client peut controler la souris du serveur.
Pour cela, je récupère donc les positions de la souris coté client avec la procedure onmousemove, je converti ensuite les 2 position en string pour utilisé l'option sendtext du clientsocket1
et je sépare les coordonnée par un | car maintenant , les écran n'ont pas tjs 3 chiffre mais parfois 4.
Donc ensuite coté serveur, je récupère les informations avec Socket.ReceiveText et puis j'utilise une boucle pour trouve le |, ensuite je met la partie qui se trouve avant le | dans la variable de coordonnée X et la partie apres le | dans la variable Y.
je converti ensuite les variable de string en entier, puis j'utilise SetCursorPos(X,Y) pour placé la souris.
Donc normalement tout devrait marché, j'ai fais mon teste, et ça plantais des que je bougeais ma souris coté client. C'était le socket qui se déconnectait. Jme suis dit, que vu que quand je bouge la souris, il y a quand meme bcp de changement de donnée, ça envoyais bcp de paquet, bcp trop et donc que ça faisais planté la connection. J'ai donc mis un timer coté client, pour que les coordonnées de la souris ne soit envoyer que toutes les 3secondes. Le message d'erreur comme quoi le socket a planté n'apparait plus tout de suite, mais bien apres 3seconde.
Je ne comprend vraiment pas pourquoi le socket lache, j'ai testé toutes les étapes de mon code une par une pour vérifié si tout marchais comme prévu, et je récupaire bien la bonne information a chaque étape...
merci d'avance