Tel net

Soyez le premier à donner votre avis sur cette source.

Vue 8 177 fois - Téléchargée 803 fois

Description

Sur le même pricipe que tel net ... on dit le nom d'un serveur , on en choisit un port ... puis on commence à parler avec le server ...

Le probléme c'est que je viens tout juste de débarquer sur Delphi ... J'en avais fait avant mais jamais sur du socket ... Donc veuillez me dire si mon code ne peut être plus optimisé ... surtout la gestion de recetion du texte du serveur ... Ce que je viens de faire marche niquel ... mais ça me semble chelou d'utiliser un timer à la place d'un evenement pour intercepter les messages du serveur ....

Bonne prog à tous =)

AKH.

Source / Exemple :


{
Le code n'a pas trés grand intérét mais bon ...
Puisqu'il le faut .... =)
Allez cependant voir le zip !

}

var
  Form1: TForm1;
  Recept: String;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host:=Edit1.Text;
// En vb cela revient au remotehost
ClientSocket1.Port:=StrToInt(Edit2.Text);
// En vb c'est le Val(String) qui est remplacé par StrToInt
ClientSocket1.Open;
// Ceci c'est la fonction Connect sauf qu'en delphi
// on ne peux pas lui rajoutter d'autres paramétres mais
// juste en faire l'appél ....
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
     RichEdit1.Text:=RichEdit1.Text+chr(13)+chr(10)+'Connecté au serveur '+Edit1.Text;
// Pour inscrire une zone de texte c'est simple
// au lieu des guillemets c'est les  ' ' ...
// au lieu de la chaîne & on mets le +
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
     RichEdit1.Text:=RichEdit1.Text+chr(13)+chr(10)+'Déconnection du Serveur '+ClientSocket1.Host;
     Clientsocket1.close;
     richedit1.SelStart := richedit1.GetTextLen;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
If Key = chr(13) then
begin
clientsocket1.Socket.SendText(Edit3.Text+chr(13)+chr(10));
RichEdit1.Text := RichEdit1.Text+chr(13)+chr(10)+'Client:'+Edit3.Text;
Edit3.Text:='';
richedit1.SelStart := richedit1.GetTextLen;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Recept:=clientsocket1.Socket.ReceiveText;
if Recept  <> '' then
begin
   RichEdit1.Text := RichEdit1.Text+chr(13)+chr(10)+'Server:'+Recept;
   richedit1.SelStart := richedit1.GetTextLen;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

end.

Conclusion :


Voilà ... ouf ! Enfin , mon premier prog en Delphi =) ...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
30 avril 2006

Utilise un timer c'est pas top, le mieu c'est de faire un object de type CReceivingDate = class(thread)....

Comme ca tu peu avoir un thread externe qui reagit a la reception de donnée, ceci ne bloquant pas ton appli
Ensuit tu crée des evenement que le thread appel du genre l'ensemble du thread en simple donne:

pReceivedInfo = procedure(Buf: string) of object;
property OnReceivedData: pReceivedInfo read FReceivedInfo write FReceivedInfo;

CReceiveData = class(TThread)
TcpCon: TTcpClient;

FReceivedInfo : pReceivedInfo;

constructor Create(Host: string;Port: integer);
procedure Execute(); override;
property OnReceivedData: pReceivedInfo read FReceivedInfo write FReceivedInfo;
end;

constructor CReceiveData.Create(Host: string;Port: integer);
begin
inherited Create(false);
FreeOnTerminate := True;
Priority := tpLower;
TcpCon := TTcpClient.Create(nil);
TcpCon.RemoteHost := Host;
TcpCon.RemotePort := Port;
TcpCon.Connect;
end;

procedure Execute(); override;
var
buf: string;
L: longint;
begin
while not TerminateurDuThread do begin
if TcpCon.Connected then begin
DataArrived:=false;
TcpCon.ReceiveBuf(L,4);
TcpCon.ReceiveBuf(Buf[1],L);

if Assigned(OnReceivedData) then
OnReceivedData(Buf);
end;
end;

Le hic c'est qu'il faut connaitre la taille de la reception, en général au debut d'une reception il y a les 4 1er octect qui sont pour dire la taille du flux arrivant, donc stock dans le L
Ainssi ce thread reste bloque sur TcpCon.ReceiveBuf(L,4) Tant que pas donnée rentre d'ou il est très important d'en faire un thread sinon toute l'appli ce bloque, et voila t'a un evenement De reception ;)
Messages postés
2
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
8 juillet 2004

Lol Amusant comme Source. Sufit de trouver un serveur.. Meme si tout les sockets Delphi se ressemblent et peuvent pratiquement tous etre joint...

Bon continu comme ca et fait un bon chat ^^.
Messages postés
15
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
1 novembre 2010

aKheNathOn, j'ai trouvé qu'il était possible d'installer le composant qui se trouve dans le répertoire bin. Il s'appelle dclsocket.bpl.
Ca marche ...
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

Ben ça veut dire que sous Delphi 7.0 Ils utilisent pas le même ocx que celui que j'utilise, donc en gros t'as pas ce composant d'installé avec la V7 ... De toute façon d'aprés ce que j'ai compris le delphi 7.0 est une version .net, donc je te conséille comme même de downloader le delphi 6.0.

Bonne prog et à +
Messages postés
15
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
1 novembre 2010

Ton code ne marche !
J'utilise Delphi 7.0 et, au moment de charger le source, Delphi me dit : Classe TClientSocket non trouvée ...

keskesavedire ?
Afficher les 8 commentaires

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.