Ce code suffirait-il pour envoyer du texte par idtcpclient [Résolu]

ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 17 juin 2005 à 19:31 - Dernière réponse : ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention
- 20 juin 2005 à 19:43
Bonjour,

Tout d'abord jaimerais savoir si il serait possible d'envoyer du texte
de client a client sans utiliser de serveur. Sinon est ce que si on
place un composants idTcpserver et un composant idtcpclient sur la meme
fiche l'application pourrait recevoir directement le texte envoyer par
le client chez l'autres personne

ce code peut il suffir pour envoyer du texte en tre 2 applications :

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,

IdTCPClient, IdTCPServer;



type

TForm1 = class(TForm)

IdTCPClient1: TIdTCPClient;

Button1: TButton;

Edit1: TEdit;

Memo1: TMemo;

IdTCPServer1: TIdTCPServer;

Button2: TButton;

procedure envoyer(Sender: TObject);

procedure recevoir(Sender: TObject);

private

{ Déclarations privées }

public

{ Déclarations publiques }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.envoyer(Sender: TObject);

begin



IdTCPClient1.Host := edit1.Text;



IdTCPClient1.Connect;

idTCPClient1.OnWork (Memo1.Lines);

end;



procedure TForm1.recevoir(Sender: TObject);

begin

IdTCPServer1.Active;

IdTCPServer1.OnConnect;



end;



end.

Si ce code n'est pas valide pourriez vous mexpliquer pourquoi et quel code pourrait marcher
Afficher la suite 

11 réponses

Répondre au sujet
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 20 juin 2005 à 19:43
+3
Utile
Tu peux cliquer sur réponse acceptée si ton problème est résolu

@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">





N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !




Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ni69
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 18 juin 2005 à 04:14
0
Utile
"Tout d'abord jaimerais savoir si il serait possible d'envoyer du texte de client a client sans utiliser de serveur" : Non, ce n'est pas possible.



Oulalala, que vois-je :

idTCPClient1.OnWork (Memo1.Lines);

IdTCPServer1.OnConnect;

Je crois savoir que tu ne connais pas trop (voire pas du tout) Indy...

Vas voir les tutoriels Indy ici : indy http://delphi.developpez.com/faq/?page=indy

et regarde les exemples fournis avec les composants avant de te lancer dans ta propre application Client/Serveur...



pour info : (mais regarde bien le lien que je t'ai passé avant d'essayer de comprendre le code qui est en dessous)



procedure TForm1.envoyer(Sender: TObject);

begin

IdTCPClient1.Host : = edit1.Text;

IdTCPClient1.Port := StrToInt(Edit2.Text);

try

IdTCPClient1.Connect;

IdTCPClient1.Writeln('texte...');

except

ShowMessage('Erreur');

end;

end;

(il faut ensuite penser à la déconnexion...)


Ta procédure de réception n'est en aucun cas fonctionnelle , car elle ne peut pas être appellée de nul part... Il faut utiliser l'événement OnExecute du serveur :

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);

var

texte : string

begin

with AThread.Connection do

begin

try

texte : = ReadLn();

ShowMessage(texte);

except

ShowMessage('Erreur');

end;

end;



@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse acceptée <
Commenter la réponse de ni69
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 18 juin 2005 à 04:16
0
Utile
Ah j'oubliais, si tu veux transférer le texte de ton Memo, remplace la ligne correspondante par celle-ci :

IdTCPClient1.Writeln(Memo1.Text);


Et il faut bien sûr que le serveur soit lui même activé sur le port désigné dans le client


@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">





N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !






Commenter la réponse de ni69
ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 18 juin 2005 à 12:07
0
Utile
Jai essayer ton code mais on compilateur me dit qu'il y a une
erreur dans la declaration type au moment ou on declare la procdure:

procedure IdTCPServer1Execute(AContext: TIdContext);

Il me dit que lerreur est queTIdContext n'est pas un identificateur declare

il y aussi une autre erreur Writeln nest pas un identificateur declare

et encore une autre AThread nest lui non plus pas un identifiacateur declare .

Pourriez vous mexpliquer ces erreurs
Commenter la réponse de ewertheimer
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 18 juin 2005 à 13:44
0
Utile
As-tu mis l'appel à la procédure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); dans l'événement OnExecute du serveur ?

Et as-tu vraiment pris le temps de lire le tutoriel que je t'ai donné


@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">





N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !




Commenter la réponse de ni69
ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 18 juin 2005 à 20:17
0
Utile
Faut il remplacer AContext et TidContext par AThread et
TIdPeerThread ou io faut le decrire quelque part parce que quand je le
fait et que je le change dans les type ils me disent toujours qu'ils
attendent un identificateur
Commenter la réponse de ewertheimer
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 19 juin 2005 à 01:46
0
Utile
Il faut mettre cette procédure dans l'événement OnExecute du serveur !!!!!!

(inspecteur d'objets, onglet événements! c'est pas très compliqué )

@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">






N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !







Commenter la réponse de ni69
ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 19 juin 2005 à 17:11
0
Utile
je sais c ce que je fait ne tenerve pas. Mais quand je le fait la procedure qui apparait n'est pas TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); mais procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);.Il y a autre chose quand tu mets

IdTCPClient1.Writeln (Memo1.Lines) ce n'est pas un identificateur
declare mais parcontre il propose IdTCPClient1.WriteHeader. Pourrais tu
poster une source sur codessource et me donner ladresse afin que je
puisse voir le code bien editer Directement sur delphi.

Merci beaucoup pour ta patience
Commenter la réponse de ewertheimer
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 19 juin 2005 à 20:43
0
Utile
Ah !!! ok j'ai compris ! tu as Indy 10 !

Et désolé pour hier

Mon code marche pour Indy 9... D'ailleurs, je te conseilles Indy 9, car
avec Indy 10, tout a été modifié et la documentation est du coup
beaucoup moins importante (et pour un débutant, c'est pas toujours
facile de s'y retrouver ! pour ma part, j'ai abandonné, je garde la
9)....

Je ne connais pas la version 10, donc je ne pourrais pas t'aider si tu gardes la 10 Désolé...


@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">






N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !





Commenter la réponse de ni69
ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 20 juin 2005 à 17:20
0
Utile
Merci beaucoup jai fait ce que tu mas dit et maintenant ton code
marche sauf a lexeption que au moment ou je click sur le bouton envoyer
on me dit chemin fu fichier source non trouvee IdStack. Et je voulais
demander si il y avait quaelque chose de special a definir dans les
proprietes.

Merci Beaucoup
Commenter la réponse de ewertheimer
ewertheimer 163 Messages postés dimanche 16 janvier 2005Date d'inscription 26 janvier 2009 Dernière intervention - 20 juin 2005 à 19:30
0
Utile
Merci Beaucoup Ni69 de mavoir aider jai enfin terminer et reussi mon logiciel.

voila le fameux code :

unit elchat;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, IdTCPServer, IdBaseComponent, IdComponent,

IdTCPConnection, IdTCPClient;



type

TForm1 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Label3: TLabel;

Edit2: TEdit;

Panel2: TPanel;

Label4: TLabel;

Label5: TLabel;

Edit3: TEdit;

Edit4: TEdit;

Label6: TLabel;

Button1: TButton;

Edit5: TEdit;

IdTCPServer1: TIdTCPServer;

Button3: TButton;

Button2: TButton;

IdTCPClient1: TIdTCPClient;

procedure envoyer(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure IdTCPServer1Execute(AThread: TIdPeerThread);

procedure connection(Sender: TObject);



private

{ Déclarations privées }

public

{ Déclarations publiques }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.envoyer(Sender: TObject);

begin





IdTCPClient1.Writeln(Edit5.Text);





end;







procedure TForm1.Button2Click(Sender: TObject);

begin

IdTCPClient1.Disconnect;



end;



procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);

var

texte : string;

begin

with AThread.Connection do

begin

try

texte := ReadLn();

ShowMessage(texte);

except

ShowMessage ('deconnection')

end;

end;

end;



procedure TForm1.connection(Sender: TObject);

begin

IdTCPServer1.DefaultPort := StrToInt(Edit3.Text);

IdTCPClient1.Host := edit1.Text;

IdTCPClient1.Port := StrToInt(Edit2.Text);

IdTCPClient1.Connect;

ShowMessage ('connection effectue');

ShowMessage ('Ne jamais reclicquer sur connection sauf apres redemmarage de l''application')



end;





end.
Commenter la réponse de ewertheimer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.