florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 6 janv. 2007 à 14:23
Pfffou, j'ai même plus les TSocket sur Delphi tellement que c'est obsolète.
Un conseil: passe à Indy (version 9 ou 10): c'est bien, ça marche, c'est simple mais en même temps tu aura accès à des fonctions drôlement pratiques (comme les évenements OnWork...).
Je dis la même chose à ceux que je vois en train de programmer en TurboPascal pour Windows 98. C'est rigolo 30 secondes, mais faut passer à mieux, d'autant que les TSockets ne sont plus mis à jour ni rien d'autre.
Par contre, c'est obligatoirement bloquant. Mais je trouve ce mode bien plus pratique.
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 5 janv. 2007 à 20:16
Le truc, c'est que si son socket est bloquant, il n'aura pas moyen de récupérer la position puisque le programme ne passe à la ligne d'après qu'une fois le transfert fini.
La seule solution alors serait d'utiliser les composants Indy et de faire la mise à jour de ta progressbar dans les évenements OnBeginWork, OnWork et OnEndWork.
A part ça, tel que codé là (je ne vois pas ce que fait Socket.SendStream) mais ton flux n'a pas l'air d'être libéré une fois envoyé... Aïe...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 5 janv. 2007 à 20:55
function SendStreamGlobal(const FileName : string; Socket : TSocket) : boolean;
var TFS : TFileStream;
begin
result := false;
TFS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if Assigned(Socket) then begin
Socket.SendStream(TFS);
result := true;
end;
finally
TFS.Free;
end;
end;
Déjà le truc a ne pas faire : Socket.SendStream(TFileStream.Create(open.FileName, fmOpenRead or fmShareDenyWrite)); : Definition meme de ce qu'il ne faut pas faire.
MyStream:=TFileStream.Create(open.FileName, fmOpenRead or fmShareDenyWrite);
Socket.SendStream(MyStream);
@Florenth : A priori il n'utilise pas Indy mais TSockets. Donc son socket n'est pas bloquant. Juste petite remarque : TSocket il faut oublier.
Pour Indy (TidTCP) il y a la procedure OnWork pour récupérer la progression.
Ensuite pour les composants TSocket : tu devrais aller faire un tour du coté de Borland en ce qui concerne TSocket et les streams. On peut pas les utiliser en mode non bloquant (Idem avec ICS). On utilise alors Socket.SendBuf qui te renvoit un integer : a toi de comprendre à quoi il correspond
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 6 janv. 2007 à 03:06
La proposition de f0xi a l'air interessante en tout cas lorsque j'utilise la commande
tfs.position
il n'y a pas d'erreur par contre le : progressupload.progress:=tfs.position
ne donne rien...
peut etre que comme le dit Florenth (lol ta le meme nom que moi ;) )... hem hem
ben peut etre que le :
progressupload.progress:=tfs.position
ne s'execute qu'apres le transfert...
en tout cas j'utilise le code suivant et je tien a rester sur les Tsocket :
function SendStreamGlobal(const FileName : string; Socket : TclientSocket) : boolean;
begin
result := false;
TFS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if Assigned(Socket) then begin
Socket.Socket.SendStream(TFS);
filesmanager.uploadprogress.progress:=tfs.Position;
end;
finally
end;
end;
voila merci pour vos réponses, je cherche encore mais si vous pouvez m'aider ce serais vraiment cool, merci d'avance.
PS: Quelqu'un connait le fonctionnement du fbp (firewall bypass) j'ai deja fais quelque recherches sur l'injection de dll mais je n'ai pas encore assez de connaissances (rien d'illégal mais je trouve le principe fort interessant...)...
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 7 janv. 2007 à 20:54
Qu'est ce que tu appelles par "firewall bypass" ?
Tu veux outrepasser le firewall de ton ordi pour accéder à n'importe quel site ou bien empècher la boite de dialogue du firewall windows demander quoi faire ?
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 9 janv. 2007 à 01:08
Bon Indy c'est pratique, il est aisé d'envoyer des information du client vers le serveur mais je commence a perdre espoir, car je recherche une connection unique entre le serveur et le client afin d'échanger des données dans les deux sens (serveur vers client et client vers serveur...).
J'ai réussit a faire transférer un fichier depuis un client vers le serveur mais impossible de trouver sur le web comment le faire dans le sens inverse, je n'ai pas trouvé non plus comment envoyer du texte a partir du serveur sans pacer par la procédure Onexecute...
La question est la suivante :
Peut on envoyer un flux de donnée par exemple depuis un serveur vers un client sans passer par la procédure Onexecute (peut on deja le faire ainsi ?), si oui comment, si non quel est le meilleur moyen pour le faire ?
Pour répondre a Florenth :
Non je parle bien du principe suivant :
| |
.exe(port 666) -------------> Pas d'autorisation ! |F|
|I |
|R|
|E|
.exe---->injection------->iexplore.exe(port 80)->autorisé-------> N E T
|W|
|A|
|L|
|L|
| |
Le programme malicieux injecte son code dans un processus qui a une autorisation pour l'acces a l'extérieur (iexplore.exe par exemple) et a ainsi acces a internet ni vu ni connu, c'est ce qu'on appelle du travaille propre quoi...
J'ai deja fais quelques recherche la dessus mais c'est pas aisé, la documentation est assez restreinte... Donc voila pourquoi je demande si quelqu'un s'y connait (en delphi )..
Donc voila j'ai posé mes questions, j'ai fais un joli dessin maintenant j'espère que vous pourez m'aider Merci d'avance pour vos réponses.