Précédent   Forum des professionnels en informatique > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2012, 11h36   #1
Invité de passage
 
Homme
Lycéen
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Par défaut [Mac] Indy + TCP foireux ?

Bonjour,

J'ai de gros problèmes avec Indy pour faire du TCP.
J'utilise idTCPServer configuré comme ceci :
- Port 4554
- ListenQueue 15
- MaxConnections 0
- ReuseSocket en OSDependant
- TerminateWait 5000

Le client idTCPClient se connecte au server via le port 4554. Normal.

Le client se connecte au server quand j'appuie sur un bouton. Et envoie 3 messages avant de se déconnecter.
Code :
1
2
3
4
5
6
7
8
9
procedure TForm1.Button3Click(Sender: TObject);
begin
  IdTCPClient1.Host := Edit1.Text;
  IdTCPClient1.Connect;
  IdTCPClient1.IOHandler.WriteLn('TRANSFERTFILE');
  IdTCPClient1.IOHandler.WriteLn('dr.txt');
  IdTCPClient1.IOHandler.WriteLn('contenu');
  IdTCPClient1.Disconnect;
end;
Le server de son côté reçoit les messages dans l'ordre (en théorie). La réception se fait dans l'event OnExecute. Comme ça foirait, j'ai mis ce que je reçois dans un memo pour monitorer.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  Cmd : String;
begin
  with AContext.Connection.IOHandler do
  begin
    Test := ReadLn;
    Cmd := Test;
 
    if Cmd = 'TRANSFERTFILE' then
    begin
      Test := ReadLn;
      Memo1.Lines.Add(Test);
      Test := ReadLn;
      Memo1.Lines.Add(Test);
    end;
  end;
  AContext.Connection.Disconnect;
end;
J'obtiens des résultats absolument illogiques. En local depuis Lazarus j'ai ça :
Citation:
dr.txt
contenu
dr.txt
contenu
En local sans passer par Lazarus j'ai ça :
Citation:
dr
TRANSFERTFILE
contenu
dr.txt
contenu
Et en exécutant le server et le client sur des machines différentes c'est ça :
Citation:
TRANSFERTFILE
dr.txt
contenu
dr.txt
contenu
C'est un peu du gros n'importe quoi ce que j'ai comme résultats... Pourtant j'ai sniffé un peu le réseau, et le client envoie bien l'info une seule fois. C'est le server qui réceptionne 2 fois les messages

Ca fait une semaine que je me casse la tête avec ça... C'est un peu ma dernière chance de faire fonctionner cette chose.
falcom4ever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 15h50   #2
Membre expérimenté
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 601
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 53
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 601
Points : 570
Points : 570
Bonjour,

Foireux ? Bien que je n'utilise plus Indy, c'est un qualificatif qui, malgré les nombreux usages de celui-ci, est rarement rencontré. Il faut bien une exception. Peut-être est-ce le cas ici. Sans aucunement préjuger de votre code, quand avec Indy le mien ne répondait pas au résultat souhaité, souvent la cause en était des "subtilités" et des mauvaises pratiques qui pourtant me semblaient logiques et "naturelles" d'autant qu'aucun message d'erreur n'agrémentait le résultat inattendu. Compliqué en plus, notamment -mais pas seulement- par la succession de versions (8,) 9 et 10 dont les fonctions et procédures ne sont pas toujours utilisables de la même façon d'une version à l'autre, bien que souvent elles conservent le même nom ou un nom très proche.

Je ne sais pas si cela pourra vous aider mais John Colobri a fait des tutos sur Indy 9 et 10 (avec Delphi) et on trouve pas mal de docs sur les forums Delphi.

Citation:
Envoyé par falcom4ever Voir le message
[Mac] Indy+TCP
Peut-être à vérifier aussi, la réelle compatibilité d'Indy avec Mac OS : il me reste un "soupçon". J'avais rencontré des problèmes d'installation aussi bien sous Win que Nux mais sur Mac OS X, ils sont demeurés insurmontables. Je suis content cependant d'apprendre que je m'y prenais mal : bien que n'ayant pas disposé du Mac longtemps (1 semaine), j'avais conclu trop rapidement que sous Lazarus, Indy 10 n'était pas "compatible".

Citation:
Envoyé par falcom4ever Voir le message
J'ai de gros problèmes avec Indy pour faire du TCP.
Ca fait une semaine que je me casse la tête avec ça... C'est un peu ma dernière chance de faire fonctionner cette chose.
Ce que j'ai retenu d'Indy, c'est que son utilisation rime avec patience et pugnacité . Faut aimer la bagarre !

Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 17h31   #3
Invité de passage
 
Homme
Lycéen
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
J'avoue que Indy peut-être assez complexe. Mais franchement, un truc plus simple que ce que je veux faire c'est pas possible >_<.

Je veux juste envoyer 3 strings à la suite, et de les lire une seul fois dans l'ordre, je lui demande pas de me faire quelque chose de compliqué hein ^^''.

Le tuto est quand même sympa, mais j'ai l'impression que limite ça me fait penser que Indy ne marche tout simplement pas sur Mac. Les résultats sont aberrants je trouve. Reste que Synapse qui tourne sur Mac, mais là j'avoue que j'ai rien capté à l'utilisation, ça a l'air galère aussi.

Je sens que c'est pas demain que je vais faire du networking avec Lazarus....

Pour installer sur Mac c'était un peu compliqué aussi, mais officiellement c'est "compatible".
falcom4ever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 20h01   #4
Membre expérimenté
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 601
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 53
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 601
Points : 570
Points : 570
Bonsoir,
Citation:
Envoyé par falcom4ever Voir le message
Reste que Synapse qui tourne sur Mac, mais là j'avoue que j'ai rien capté à l'utilisation, ça a l'air galère aussi.
Je vous ai transformé et simplifié rapidement une petite démo TCP "Synapse Delphi" en Lazarus. Je l'ai compilée en Win et Nux après les quelques modifications nécessaires.

Si vous l'utilisez en Win, vous commenterez le cthreads :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program TTCP;
 
{$mode objfpc}{$H+}
 
uses
  //cthreads, {A commenter en Win ou jouer avec les $IFDEF}
 
  Interfaces, // this includes the LCL widgetset
  Forms,
  mainU in 'mainU.pas' {Form1},
  TCPServer in 'TCPServer.pas',
  TCPClient in 'TCPClient.pas'; {Dans l'exemple original : vide}
 
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
et (toujours pour Win) dans les options du projet, options du compilateur, nom du fichier cible : TTCP.exe au lieu de TTCP.

La principale modification est dans TCPServer. Il faut remplacer dans les uses la winsock par synsock
Code :
1
2
3
4
5
uses
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
    blcksock,
   {winsock valable que pour Win - A remplacer par SynSock}
    synsock ;
Pour tester, j'ai utilisé Lazarus 0.9.31-FPC 2.6.1 dans les 2 environnements Win et Nux. La bibliothèque Synapse est incluse dans le projet contenu dans TTCP-Synapse.zip (que j'ai modifié à partir du projet Delphi contenu dans UDP_TCP_Example.zip) et les options du compilateur (pour le projet) sont renseignées. Pour Mac, à mon avis, il n'y a rien à changer.

Lien ftp. Dernière précision : si Synapse fonctionne (paraît-il) sous Mac, la bibliothèque est normalement "only 32 bits" quelque soit l'environnement.

Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/02/2012, 10h35   #5
Invité de passage
 
Homme
Lycéen
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Merci Gilles,

Avec Lazarus 0.9.30.2 et fpc 2.4.4, j'arrive à compiler.

Par contre après j'arrive à rien faire avec le form. C'est comme si tout est disabled :S.

C'est un peu bizarre, j'ai essayé de créer une nouvelle forme en la faisant pareil, mais le même problème.

Je vais continuer à voir si j'arrive à faire marcher, merci pour l'exemple .
Je vais essayer d'en tirer quelque chose quand même.
falcom4ever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 13h04   #6
Membre expérimenté
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 601
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 53
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 601
Points : 570
Points : 570
Bonjour,

A mon avis, recréez un projet. Dans son répertoire, copiez la librairie Synapse. Dans Projet --> options --> option du compilateur --> chemin, vous ajoutez le chemin relatif de la librairie (ie libsynapse) dans Autres fichiers unité (-Fu) et dans Librairies (-FI).

Ceci fait, vous devriez essayer-plutôt que de refaire les Forms ou les Units- de copier dans le répertoire du projet les 4 fichiers mainU.lfm, mainU.pas, TCPClient.pas, TCPServer.pas...

Ne pas oublier d'ajouter mainU après Forms, dans les uses du projet (Projet --> View Project Source).
Code :
1
2
3
4
5
uses
  cthreads,
  Interfaces, // this includes the LCL widgetset
  Forms,
  mainU;
Les 2 autres (TCPServer, TCPClient) sont inutiles à cet endroit du programme. Je suppose que le cthreads est nécessaire sous Mac.

Si cela ne fonctionne pas, vous pourrez reconstruire la Form et les 2 units... Peut-être dans les uses y a-t-il quelque chose de différent (supplémentaire) sous Mac.

Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 10h31   #7
Invité de passage
 
Homme
Lycéen
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Bon décidément Mac c'est pas mon truc... J'abandonne de développer sur cet OS, je retourne à un bon vieux Windows. Même avec une vieille version de Delphi j'ai toujours réussi faire ce que je voulais :/.

Sur Indy les paquets n'arrivent pas dans l'ordre, c'est un peu mauvais. Synapse même si ça peut marcher un peu mieux en théorie, ça à l'air un peu galère quand même.
falcom4ever est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 11h35   #8
Membre expérimenté
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 601
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 53
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 601
Points : 570
Points : 570
Bonjour,

Désolé de ne pouvoir vous aider plus. Je n'ai pas eu le temps -ni l'envie d'ailleurs- de faire plus d'efforts que vous avec Mac. Naïvement, j'ai cru au départ que Mac OS X, proche cousin de Linux*, serait facile à utiliser en programmation avec Lazarus. J'ai rapidement déchanté. Je me sers tous les jours de Win et Nux avec Lazarus et c'est vraiment un plaisir... ce qui n'empêche pas les prises de tête. Si Mac OS n'était pas un choix "contraint" et que vous voulez essayer autre chose que Win, essayez Nux si vous ne connaissez pas. Avec Wubi par exemple, vous pouvez installer et désinstaller Ubuntu en un clin d'oeil à partir de votre Windows... Lazarus/FPC s'installe très bien... et fonctionne très bien (y compris Indy ... et Synapse).

Cordialement. Gilles

* si j'en crois les informations Web, MacOSX est un Unix basé sur un noyeau spécifique (Xnu) et utilisant principalement des packages BSD.
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2012, 17h47   #9
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2006
Messages : 117
Points : 33
Points : 33
Bonjour,

Pour avoir porté un projet complet de Delphi/Windows vers Lazarus/Mac, je peux confirmer avec fermeté que Indy ne fonctionne pas du tout sur MacOS.

D'une manière générale, Lazarus n'est pas non plus un modèle de stabilité sur cette plateforme, mais reste utilisable, à condition d'oublier Indy.

Synapse fonctionne très bien en effet. Ce n'est absolument pas galère, mais ça change évidemment les habitudes.

André.
sinfoni est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h39.


 
 
 
 
Partenaires

Hébergement Web