Image / socket

deaphrothe Messages postés 10 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 8 août 2004 - 7 août 2004 à 18:49
preti Messages postés 53 Date d'inscription mercredi 19 mars 2003 Statut Membre Derniè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.

merci d'avance

2 réponses

deaphrothe Messages postés 10 Date d'inscription dimanche 9 février 2003 Statut Membre Derniè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
0
preti Messages postés 53 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 7 septembre 2006
16 août 2004 à 11:04
Voilà j'ai testé pour ta souris et moi ca joue, ci-dessous un peu de code :)

Code du Timer:
var
position:Tpoint;
begin

position:=Mouse.CursorPos;
ServerSocket1.Socket.Connections[0].SendText(inttostr(position.x)+'|'+inttostr(position.Y));

end;

Code de l'event reader:

memo1.Lines.Add(Socket.ReceiveText);

J'ai juste testé en écrivant ce que je recevais dans une memo et ca joue niquel... maybe le connections[0] que tu as oublié ... hésite pas si jamais

Hatman
[mailto:hatman@mail.com hatman@mail.com]
0
Rejoignez-nous