Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1335 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Petit programme pour faire ses comptes ; C'est quoi ce gros bug

n°1492545
Profil sup​primé
Posté le 18-12-2006 à 09:46:37  answer
 

Reprise du message précédent :

Loki du placard a écrit :

J'ai bien gnat sous windows. tu pourrais mettre un zip des sources sur ton site, histoire d'aller plus vite.
 ;)


 


 
On vous a pas revu depuis ça  :hello: , j'espere que vous vous portez bien !
Merci quand même  :jap:  

mood
Publicité
Posté le 18-12-2006 à 09:46:37  profilanswer
 

n°1492630
Profil sup​primé
Posté le 18-12-2006 à 12:59:20  answer
 

Alors voila, pour ceux et celles qui suivent, j'ai ajouté 4 modes concernant le transfert de fichier au model A127 auquel j'ai integré la gestion multi-comptes de Fmi  ce qui donne Fmi-1.0.0. J'ai aussi ajouté un mode gestion_de_production qui sera developpé par la suite et un mode previsionnel que je vais implementer immediatement. l'implementation des mode concernant le transfert de fichier vas etre long, je suis seul à ecrire et comme vous voyez, je découvre. Et de cette application je voudrai en faire une version X avec GtkAda mais je manque de documentation (en français)
 
Merci de votre patience  :jap:  
 
 

n°1492980
Profil sup​primé
Posté le 18-12-2006 à 21:53:50  answer
 

Bonsoir,
j'ai créé deux paquetages distincts pour la gestion des données previsionnelles et réelles.
j'ai fait un copier/coller de Mode_Reel dans Mode_Previsionnel, ça ce ressemble ... le reste est à venir ...
l'option -x ou --prevision_filename permetent de spécifier un nom de fichier pour les données prévisionnelles.  
les source de Fmi-1.0.0 sont dispo au format zip et tgz, utilise gnat et tourne sur Gnu/Linux. Pour tourner sur Win il suffi de remplacer "clear" par "cls" je crois.
 
Voila ... allé .. au taf  [:bossniak]
 
 
Edit : j'oulbier, pour la section transfert de fichier et même pour d'autres fonctions, je vais devoir modéliser un système client/serveur .... et je sais pas vraiment comment il et bien plus mieu de s'y prendre ... voyer ce que je veux dire  [:dawa_neowen]  
 
A+ Merci, danke, thank you  :jap:

Message cité 1 fois
Message édité par Profil supprimé le 18-12-2006 à 21:57:38
n°1493058
Profil sup​primé
Posté le 19-12-2006 à 00:27:46  answer
 


 
J'ai implémenté la saisie de la date d'operation dans le Mode_Previsionnel, ce qui ajoute un paquetage p_date, ainsi que deux fonction 'to_real' qui ecrit une prevision dans le relevé reel et 'to_self' qui ecrit une prevision dans l'echeancier.

n°1493059
0x90
Posté le 19-12-2006 à 00:29:27  profilanswer
 

Tu devrais remplacer les bmp de ton site par des png, ça prendra beaucoup moins de temps à charger ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1493060
Profil sup​primé
Posté le 19-12-2006 à 00:34:56  answer
 

oui, merci

n°1493114
Profil sup​primé
Posté le 19-12-2006 à 09:51:37  answer
 

Bonjour  :hello: ,
 
Petites question .... Hier, je ne sais plus à quelle heure, bref, à l'execution de Fmi-1.0.0/0.0.1-alpha, j'avais 10 ou 11 processus Gnu/Linux Debian correspondant vraisemblablement aux 10 taches contenuent dans le main et aujourd'hui je n'en ai plus qu'une .. pourquoi ?
 
Si je me retrouvais à nouveau avec 10 processus, je souhaiterai avoir un non different pour chaque tache .. si c'est possible. Mais bon, aujourd'hui j'en ai plus qu'un ... alors .. c'est de l'extra   :lol:  
 
Merci  :jap:

Message cité 1 fois
Message édité par Profil supprimé le 19-12-2006 à 09:56:44
n°1493128
Profil sup​primé
Posté le 19-12-2006 à 10:10:07  answer
 


 
 
Bon, et bien, j'ai trouvé vite et bien (un coup de bol) ... c'est une question de version du noyau, en parlant simplement.
le 2.4.27 cré 10 processus le 2.6.18 n'en cré qu'un ...
 
Alors la question en extra devien question poilante ...  :lol:
Comment faire quand je suis sur un noyau tel que le 2.4.27, pour que les 10 processus aient un nom different ... correspondant aux noms de mes taches ?

n°1494129
Profil sup​primé
Posté le 20-12-2006 à 13:07:50  answer
 

Qu'elqu'un pourait-il me dire à quelle erreur correspond l'erreur  SOCKETS.SOCKET_ERROR ::= 13  de BInd de AdaSockets.
 
Je cherche à savoir par ailleur si je doit configurer un minimum mon OS pour pouvoir utiliser le reseau !
si je peut utiliser comme ça le port 1000 par exemple  
 
Merci

n°1494168
Profil sup​primé
Posté le 20-12-2006 à 13:48:36  answer
 

Bon, ça roule ... c'est pas trop complexe, d'ici une semaine je devrais avoir fait un truc "rigolot"  :lol:  
 
A+, merci  :jap:

mood
Publicité
Posté le 20-12-2006 à 13:48:36  profilanswer
 

n°1494490
Profil sup​primé
Posté le 20-12-2006 à 19:29:57  answer
 

Bonsoir,
 
j'ai une erreur ::= raised SOCKETS.SOCKET_ERROR : Setsockopt failed (errno is 22) ; Et je ne sais pas du tout quoi en faire ... argument invalid peut-etre ... mais je ne fait pas d'appel à Setsockopt .. alors me voila  [:dawa_neowen]  
 
J'ai rien fait d'extraordinaire .. en plus je n'ai fait que copier l'exemple "multi" du paquetage AdaSockets
 

Code :
  1. with Sockets.Multicast;
  2. use Sockets, Sockets.Multicast;
  3.  
  4. procedure Main is
  5.  
  6.   Multi_Sock_Fd : Multicast_Socket_Fd :=
  7.     Create_Multicast_Socket("224.1.0.0", 4161);
  8. --     Create_Multicast_Socket(Argument(1), Integer'Value
  9. --                             (Argument(2)));
  10.  
  11.   task Hello;
  12.   task body Hello is
  13.   begin
  14.      loop
  15.         delay 2.0;
  16.         Put(Multi_Sock_Fd, "hello::=" & "denimes.net" );
  17.  
  18.      end loop;
  19.   end Hello;
  20.  
  21. begin
  22.   null
  23. end main;


 
Quelqu'un ?


Message édité par Profil supprimé le 20-12-2006 à 19:35:58
n°1494516
Profil sup​primé
Posté le 20-12-2006 à 20:11:33  answer
 

le même programme "multi" compilé dans le repertoire de "main" me sort la même erreur, mais "main" compilé dans le repertoir de "multi" me sort la même erreur aussi ... quelle embrouille  :(  

n°1494595
Profil sup​primé
Posté le 21-12-2006 à 00:07:13  answer
 

Comme j'ai des problème avec Adasockets, je me suis plongé dans Gnat.Sockets et j'ai un souci, je ne trouve aucun parametre permetant de specifier l'adresse du destinataire ou alors je suis aveugle, ou je comprend rien.
 
Comment spécifit-on l'adresse du destinataire avec Gnat.Sockets ?
Il faut construire les datagrames IP ou j'ai la berlu ? Non, c'est pas normal, d'u coté on a des service IP et de l'autre il faudrais construire les trames ...  :pt1cable:
 
A ça y est, je suis telement passé dessu que je l'avais oublié, d'ailleur c'est pas flagrant :

Code :
  1. type Inet_Addr_Type (Family : Family_Type := Family_Inet) is private;
  2.   --  An Internet address depends on an address family (IPv4 contains 4
  3.   --  octets and Ipv6 contains 16 octets). Any_Inet_Addr is a special value
  4.   --  treated like a wildcard enabling all addresses. No_Inet_Addr provides a
  5.   --  special value to denote uninitialized inet addresses.
  6.  
  7.   Any_Inet_Addr : constant Inet_Addr_Type;
  8.   No_Inet_Addr  : constant Inet_Addr_Type;
  9.  
  10.   type Sock_Addr_Type (Family : Family_Type := Family_Inet) is record
  11.      Addr : Inet_Addr_Type (Family);   ----- C'EST LA, enfin, j'espere ??
  12.      Port : Port_Type;
  13.   end record;


 
 
Ca y est, je m'en sort, j'espere que ça va marcher, à+  :jap:


Message édité par Profil supprimé le 21-12-2006 à 00:46:22
n°1494629
Profil sup​primé
Posté le 21-12-2006 à 08:35:45  answer
 

Bonjour,  
 
Le programme suivant termine "anormalement" avec une erreur TASKING_ERROR : s-tasren:486
je ne sais pas pourquoi j'ai cette erreur .. certainement un problème d'utilisation de Gnat.Sockets mais je ne sais pas plus. Merci pour votre aide
 
mon code ::=  

Code :
  1. -------------------------------------------------------------------------------
  2. --  Description : envoye le message "Hello, my IP address is ", suivi de     --
  3. --                l'image de l'adresse IP donnee en argument de ligne de     --
  4. --                commande toute les 10 secondes pendant 35 secondes sur     --
  5. --                le reseau Internet en multicast (tous les hotes du reseau. --
  6. -------------------------------------------------------------------------------
  7.  
  8. with Text_Io;
  9. with Ada.Command_Line;
  10. with Gnat.Sockets;
  11. use Gnat.Sockets;
  12. with Ada.Exceptions;
  13. use Ada.Exceptions;
  14. procedure Main is
  15.   type String_Access is access String;
  16.   Internet_Address : Inet_Addr_Type := Inet_Addr(Ada.Command_Line.Argument(1));
  17.   Multicast_Group : constant String := "239.255.128.128";
  18.   Multicast_Port : Port_type := 55506;
  19.  
  20.  
  21.   task Hello is
  22.      entry Start;
  23.      entry Stop;
  24.   end Hello;
  25.  
  26.   task body Hello is
  27.      End_Of_Hello : Boolean := false;
  28.      Address : Sock_Addr_Type(Family_Inet);
  29.      Socket  : Socket_Type;
  30.      Channel : Stream_Access;
  31.  
  32.   begin
  33.      accept Start;
  34.      Address.Addr := Inet_Addr(Multicast_Group);
  35.      Address.Port := Multicast_Port;
  36.      Create_Socket(Socket, Family_Inet, Socket_datagram);
  37.      Set_Socket_Option(Socket,
  38.                        Socket_Level,
  39.                        (Reuse_Address, True));
  40.      Set_Socket_Option(Socket,
  41.                        Ip_Protocol_For_Ip_Level,
  42.                        (Add_Membership, Inet_Addr(Multicast_Group),
  43.                         Any_Inet_Addr));
  44.      Set_Socket_Option(Socket,
  45.                        Ip_Protocol_For_Ip_Level,
  46.                        (Multicast_Ttl, 1));
  47.      Set_Socket_Option(Socket,
  48.                        Ip_Protocol_For_Ip_Level,
  49.                        (Multicast_loop, true));
  50.  
  51.      delay 0.2;
  52.      Bind_Socket(Socket,Address);
  53.      Channel := Stream(Socket);
  54.      delay 0.2;
  55.      while not End_Of_Hello Loop
  56.         select
  57.            accept Stop do
  58.               Text_Io.Put_Line("Stop response" );
  59.               End_Of_Hello := True;
  60.  
  61.            end Stop;
  62.         or
  63.            delay 0.0;
  64.            Text_Io.Put_Line("Entree" );
  65.            String'output(Channel,"Hello, my IP address is " );
  66.            & Image(Internet_Address));
  67.            Text_Io.Put_Line("Sortie" );
  68.            delay 2.0;
  69.         end select;
  70.      end loop;
  71.      Close_Socket(Socket);
  72.   exception
  73.      when Tasking_Error =>
  74.         Close_Socket(Socket);
  75.   end Hello;
  76.  
  77. begin
  78.   Initialize;
  79.  
  80.   Text_Io.Put_line("Program begining." );
  81.   Text_Io.New_Line;
  82.  
  83.   Hello.Start;
  84.   delay 10.0;
  85.   Text_Io.Put_Line("Call Stop" );
  86.   Hello.Stop;
  87.  
  88.   Text_Io.New_Line;
  89.   Text_Io.Put_line("Program terminated." );
  90.  
  91.   Finalize;
  92.   abort Hello;
  93. exception
  94.   when E : others =>
  95.      Text_Io.Put_Line(Exception_Name(E) & ": " & Exception_Message(E));
  96. end Main;


 
 
en fait, la ligne 486 de l'erreur correspond à la ligne 74 du code ci-dessou extrait de s-tasren.adb

Code :
  1. ----------------------
  2.   -- Call_Synchronous --
  3.   ----------------------
  4.  
  5.   --  Called from Call_Simple and Task_Entry_Call.
  6.  
  7.   procedure Call_Synchronous
  8.     (Acceptor              : Task_ID;
  9.      E                     : Task_Entry_Index;
  10.      Uninterpreted_Data    : System.Address;
  11.      Mode                  : Call_Modes;
  12.      Rendezvous_Successful : out Boolean)
  13.   is
  14.      Self_Id    : constant Task_ID := STPO.Self;
  15.      Level      : ATC_Level;
  16.      Entry_Call : Entry_Call_Link;
  17.  
  18.   begin
  19.      pragma Assert (Mode /= Asynchronous_Call);
  20.  
  21.      Local_Defer_Abort (Self_Id);
  22.      Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level + 1;
  23.      pragma Debug
  24.        (Debug.Trace (Self_Id, "CS: entered ATC level: " &
  25.         ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
  26.      Level := Self_Id.ATC_Nesting_Level;
  27.      Entry_Call := Self_Id.Entry_Calls (Level)'Access;
  28.      Entry_Call.Next := null;
  29.      Entry_Call.Mode := Mode;
  30.      Entry_Call.Cancellation_Attempted := False;
  31.  
  32.      if Parameters.Runtime_Traces then
  33.         Send_Trace_Info (W_Call, Acceptor, Entry_Index (E));
  34.      end if;
  35.  
  36.      --  If this is a call made inside of an abort deferred region,
  37.      --  the call should be never abortable.
  38.  
  39.      if Self_Id.Deferral_Level > 1 then
  40.         Entry_Call.State := Never_Abortable;
  41.      else
  42.         Entry_Call.State := Now_Abortable;
  43.      end if;
  44.  
  45.      Entry_Call.E := Entry_Index (E);
  46.      Entry_Call.Prio := Get_Priority (Self_Id);
  47.      Entry_Call.Uninterpreted_Data := Uninterpreted_Data;
  48.      Entry_Call.Called_Task := Acceptor;
  49.      Entry_Call.Exception_To_Raise := Ada.Exceptions.Null_Id;
  50.  
  51.      --  Note: the caller will undefer abort on return (see WARNING above)
  52.  
  53.      if Single_Lock then
  54.         Lock_RTS;
  55.      end if;
  56.  
  57.      if not Task_Do_Or_Queue
  58.        (Self_Id, Entry_Call, With_Abort => True)
  59.      then
  60.         Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level - 1;
  61.  
  62.         if Single_Lock then
  63.            Unlock_RTS;
  64.         end if;
  65.  
  66.         if Parameters.Runtime_Traces then
  67.            Send_Trace_Info (E_Missed, Acceptor);
  68.         end if;
  69.  
  70.         Initialization.Undefer_Abort (Self_Id);
  71.         pragma Debug
  72.           (Debug.Trace (Self_Id, "CS: exited to ATC level: " &
  73.            ATC_Level'Image (Self_Id.ATC_Nesting_Level), 'A'));
  74.         raise Tasking_Error;
  75.      end if;
  76.  
  77.      STPO.Write_Lock (Self_Id);
  78.      pragma Debug
  79.        (Debug.Trace (Self_Id, "Call_Synchronous: wait", 'R'));
  80.      Entry_Calls.Wait_For_Completion (Entry_Call);
  81.      pragma Debug
  82.        (Debug.Trace (Self_Id, "Call_Synchronous: done waiting", 'R'));
  83.      Rendezvous_Successful := Entry_Call.State = Done;
  84.      STPO.Unlock (Self_Id);
  85.  
  86.      if Single_Lock then
  87.         Unlock_RTS;
  88.      end if;
  89.  
  90.      Local_Undefer_Abort (Self_Id);
  91.      Entry_Calls.Check_Exception (Self_Id, Entry_Call);
  92.   end Call_Synchronous;


 
 
Décidement, i re be back  [:dawa_neowen]
 
edit ::=  :heink: , et pour les premier lecteur qui on lu le premier code posté .... je vous prie de ne pas vous moquer  ;)


Message édité par Profil supprimé le 21-12-2006 à 16:10:46
n°1494707
Profil sup​primé
Posté le 21-12-2006 à 10:31:42  answer
 

j'avance, j'ai remplacé Connect_Socket() par Bind_Socket(), je rentre à present dans le or delay() mais je m'arrete sur le string'output()

n°1494895
Profil sup​primé
Posté le 21-12-2006 à 16:18:22  answer
 

Et revoila l'errno 22  :bounce:

n°1494962
Profil sup​primé
Posté le 21-12-2006 à 17:56:38  answer
 

J'ai réussi à faire ce que je voulait, c'est à dire, envoyer un message en multicast, a priori, avec le code suivant, c'est une adaptation de l'exemple pingpong de Gnat.Socket.

Code :
  1. with GNAT.Sockets; use GNAT.Sockets;
  2.  
  3.     with Ada.Text_IO;
  4.     with Ada.Exceptions; use Ada.Exceptions;
  5.  
  6.     procedure Main_2 Is
  7.        Group : constant String := "239.255.128.128";
  8.        --  Multicast group: administratively scoped IP address
  9.        task Pong is
  10.           entry Start;
  11.           entry Stop;
  12.        end Pong;
  13.  
  14.        task body Pong is
  15.           Address  : Sock_Addr_Type;
  16.           Socket   : Socket_Type;
  17.           Channel  : Stream_Access;
  18.           End_Of_Hello : Boolean := False;
  19.  
  20.        begin
  21.           accept Start;
  22.           Create_Socket (Socket, Family_Inet, Socket_Datagram);
  23.           Set_Socket_Option
  24.             (Socket,
  25.              Socket_Level,
  26.              (Reuse_Address, True));
  27.           Set_Socket_Option
  28.             (Socket,
  29.              IP_Protocol_For_IP_Level,
  30.              (Add_Membership, Inet_Addr (Group), Any_Inet_Addr));
  31.           Set_Socket_Option
  32.             (Socket,
  33.              IP_Protocol_For_IP_Level,
  34.          (Multicast_TTL, 1));
  35.           Set_Socket_Option
  36.             (Socket,
  37.              IP_Protocol_For_IP_Level,
  38.              (Multicast_Loop, True));
  39.           Address.Addr := Any_Inet_Addr;
  40.           Address.Port := 55505;
  41.           Bind_Socket (Socket, Address);
  42.           Address.Addr := Inet_Addr (Group);
  43.           Address.Port := 55506;
  44.           Channel := Stream (Socket, Address);
  45.           while not End_Of_Hello Loop
  46.              select
  47.                 accept Stop do
  48.                    End_Of_Hello := True;
  49.                 end Stop;
  50.              or
  51.                 delay 0.0;
  52.                 declare
  53.                    Message : String := "Hello, my IP address is ";
  54.                 begin
  55.                    String'Output (Channel, Message);
  56.                 end;
  57.              end select;
  58.              delay(2.0);
  59.           end loop;
  60.           Close_Socket (Socket);
  61.        exception when E : others =>
  62.           Ada.Text_IO.Put_Line
  63.             (Exception_Name (E) & ": " & Exception_Message (E));
  64.       end Pong;
  65.  
  66. begin
  67.        Initialize (Process_Blocking_IO => False);
  68.        Pong.Start;
  69.        delay 1.0;
  70.        Pong.Stop;
  71.        Finalize;
  72.        Ada.Text_Io.Put("Please wait 5 seconds ..." );
  73.        delay(5.0);        
  74. end main_2;


 
Maintenant je voudrais recevoir le message avec un autre programme. Alors même technique, sauf que j'ai utilisé ping  (et pong pour l'envoi), mais ça ne marche pas, j'ai des errno 22 et des Connection refused [111], je cherche donc à savoir. Vous aurait remarqué que je n'y connait rien, mais alors si j'arrive à faire marcher ce truc ... se sera grace à vous  :jap:


Message édité par Profil supprimé le 21-12-2006 à 18:15:51
n°1494971
Profil sup​primé
Posté le 21-12-2006 à 18:45:03  answer
 

:bounce:  Ca marche .... ça tourne tout le monde doit recevoir un message "Hello, my IP address is from 192.168.1.100:55505" désolé  [:dawa_neowen]

n°1494981
Profil sup​primé
Posté le 21-12-2006 à 19:02:45  answer
 

Quelqu'un pour fair un test de transport sur l'Internet pour confirmer l'experience, je mais les sources en ligne ICI, d'ici 20 minutes.


Message édité par Profil supprimé le 21-12-2006 à 19:04:19
n°1495006
Profil sup​primé
Posté le 21-12-2006 à 19:45:47  answer
 

Zut alors, le multicast n'est pas routé sur l'Internet, dixit IOky. Faut que je revoie mon protocole ... les boulleee  :heink:


Message édité par Profil supprimé le 21-12-2006 à 20:03:26
n°1495160
Profil sup​primé
Posté le 22-12-2006 à 06:20:46  answer
 

Bonjour,
 
Toujour sur le réseau ... j'ai donc écris un programme, qui à priori scrute le reseau, que je souhaite lancer en tache de fond et arreter par un appel du même programme avec un argument "stop". La persistance du programme est assuré par une variable booléenne Start_Stop dans un paquetage Shared_Passive. A l'appel, sans argument, de mise en fonction, le programme demare et s'execute "normalement" mais à l'appel d'arret avec l'argument "stop", le processus en tache de fond ne s'arrete pas.
 
le main ::=

Code :
  1. with GNAT.Sockets; use GNAT.Sockets;
  2. with Demon;
  3. with Ada.Command_Line;
  4. use Ada.Command_Line;
  5. with Ada.Text_IO;
  6. with Ada.Exceptions; use Ada.Exceptions;
  7.  
  8. procedure main is
  9.  
  10.   Group : constant String := "239.255.128.128";
  11.  
  12.   task Ping is
  13.      entry Start;
  14.      entry Stop;
  15.   end Ping;
  16.  
  17.  
  18.   task body Ping is
  19.      ...
  20.      ...
  21.   end Ping;
  22.  
  23. begin
  24.   if Ada.Command_Line.Argument_Count > 0 and then
  25.     Ada.Command_Line.Argument(1) = "stop" then
  26.      Demon.Start_Stop := True;
  27.      abort Ping;
  28.   else
  29.      Demon.Start_Stop := false;
  30.      Initialize (Process_Blocking_IO => false);
  31.      Ping.Start;
  32.      while not Demon.Start_Stop loop
  33.         null;
  34.         delay 0.5;
  35.      end loop;
  36.      Ping.Stop;
  37.      Finalize;
  38.   end if;
  39. end main;


 
la variable Start_Stop ::=

Code :
  1. package Demon is
  2.   pragma Shared_Passive(Demon);
  3.   Start_Stop : Boolean := False;
  4. end Demon;


 
Peut-etre une mauvaise utilisation de Shared_Passive, mais alors, comment puis-je faire ?
 
Merci

Message cité 2 fois
Message édité par Profil supprimé le 22-12-2006 à 06:23:35
n°1495443
Profil sup​primé
Posté le 22-12-2006 à 18:24:55  answer
 


Bonsoir,
Je vais utiliser un fichier est tester si il existe ou un truc comme ça.
 
pour en revenir au reseau, j'ai ecrit deux petit programme, l'un qui est sensé ecouter sur Internet et l'autre lui parler, mais evidemment, ça ne marche pas  :lol:  
 
Voici les codes
 
le recepteur ::=

Code :
  1. with GNAT.Sockets; use GNAT.Sockets;
  2. with Demon;
  3. with Ada.Command_Line;
  4. use Ada.Command_Line;
  5. with Ada.Text_IO;
  6. with Ada.Exceptions; use Ada.Exceptions;
  7.  
  8. procedure main is
  9.  
  10.        task Pong is
  11.           entry Start;
  12.           entry Stop;
  13.        end Pong;
  14.  
  15.        task body Pong is
  16.           Address  : Sock_Addr_Type;
  17.           Server   : Socket_Type;
  18.           Channel  : Stream_Access;
  19.           End_Of_Server : Boolean := False;
  20.        begin
  21.           accept Start;
  22.           Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
  23.           Address.Port := 5876;
  24.           Create_Socket (Server);
  25.           Set_Socket_Option
  26.             (Server,
  27.              Socket_Level,
  28.              (Reuse_Address, True));
  29.           Bind_Socket (Server, Address);
  30.           Listen_Socket (Server);
  31.             Channel := Stream (server);
  32.           delay 0.2;
  33.           while not End_Of_Server loop
  34.              select
  35.                 accept Stop do
  36.                    End_Of_Server := True;
  37.                 end Stop;
  38.              or
  39.                 delay 0.0;
  40.                   declare
  41.                      Message : String := String'Input (Channel);
  42.  
  43.                   begin
  44.                      Ada.Text_IO.Put_Line("Message from " &
  45.                                           Image(Get_Address(channel)) & " ::=" );
  46.                      Ada.Text_IO.Put_Line (Message);
  47.                   end;
  48.              end select;
  49.           end loop;
  50.           Close_Socket (Server);
  51.        end Pong;
  52.  
  53.  
  54. begin
  55.   if Ada.Command_Line.Argument_Count > 0 and then
  56.     Ada.Command_Line.Argument(1) = "stop" then
  57.      Demon.Start_Stop := True;
  58.      abort pong;
  59.   else
  60.      Demon.Start_Stop := false;
  61.      Initialize (Process_Blocking_IO => false);
  62.      Pong.Start;
  63.      while not Demon.Start_Stop loop
  64.         null;
  65.         delay 0.5;
  66.      end loop;
  67.      Pong.Stop;
  68.      Finalize;
  69.   end if;
  70. end main;


Bon, c'est pas le bon code(le probleme de verou), mais c'est pas ça le probleme ...
 
l'emeteur ::=
 

Code :
  1. with GNAT.Sockets; use GNAT.Sockets;
  2. With Ada.Command_Line;
  3. with Ada.Text_IO;
  4. with Ada.Exceptions; use Ada.Exceptions;
  5.  
  6. procedure main is
  7.  
  8.  
  9.   task Pong is
  10.      entry Start;
  11.           entry Stop;
  12.        end Pong;
  13.  
  14.        task body Pong is
  15.           Address  : Sock_Addr_Type;
  16.           Socket   : Socket_Type;
  17.           server   : Socket_Type;
  18.           Channel  : Stream_Access;
  19.  
  20.        begin
  21.           accept Start;
  22.           Address.Addr := Addresses (Get_Host_By_Name ("denimes.net" ), 1);
  23.           Address.Port := 5876;
  24.  
  25.           Create_Socket (socket);
  26.           Set_Socket_Option
  27.             (socket,
  28.              Socket_Level,
  29.              (Reuse_Address, True));
  30.       
  31.           Connect_Socket(Socket, Address);
  32.           Channel := Stream (Socket);
  33.           delay 0.2;
  34.           declare
  35.              Message : String := );
  36.           begin
  37.                            String'output (Channel, message);
  38.           end;
  39.           Close_Socket (Socket);
  40.           accept Stop;
  41.        exception when E : others =>
  42.           Ada.Text_IO.Put_Line
  43.             (Exception_Name (E) & ": " & Exception_Message (E));
  44.        end Pong;
  45.  
  46.     begin
  47.        Initialize (Process_Blocking_IO => False);
  48.        Pong.Start;
  49.        Pong.Stop;
  50.        Finalize;
  51.   end main;


 
et l'erreur  [:dawa_neowen] c'est gnat.sockets.socket_error [111] Connection refused au lancement de l'éméteur


Message édité par Profil supprimé le 22-12-2006 à 18:35:03
n°1495447
Profil sup​primé
Posté le 22-12-2006 à 18:45:55  answer
 

Ben, j'ai plus l'erreur Connection refused because, j'ai configuré mon routeur  :pfff:
mais le message ne passe pas tout de même.

n°1495450
Profil sup​primé
Posté le 22-12-2006 à 18:58:40  answer
 

:bounce: ça marche ça tourne ...  :lol:
vous voulez les corrections  [:dawa_neowen]  :lol:  

n°1495509
Profil sup​primé
Posté le 22-12-2006 à 22:12:53  answer
 
n°1495531
Profil sup​primé
Posté le 22-12-2006 à 23:10:04  answer
 

En fait la tache reste planté sur le listen_socket et n'atteind l'accept stop qu'au message suivant.

n°1495570
Profil sup​primé
Posté le 23-12-2006 à 07:39:42  answer
 

bonjour, toujours dans le cadre de l'utilisation de Gnat.Sockets !

Code :
  1. -- Je cre et j'initialise 2 taches serveur_enfants qui attendent stop ou init et
  2. --qui a  leur tour cre une taches qui ecoute sur le port 5876 qui attend init et
  3. --qui sera avorte a l'apelle de stop du serveur_enfant. j'appelle init, j'attend
  4. --2 secondes et j'appelle stop
  5. with Text_Io;
  6. use Text_Io;
  7. with Gnat.Sockets;
  8. use Gnat.Sockets;
  9. with Ada.Exceptions;
  10. use Ada.Exceptions;
  11. procedure Main is
  12.  
  13.   task type T_T_Listen is
  14.      entry Init(Socket : in out Socket_Type;
  15.                 Server : Socket_Type);
  16.   end T_T_Listen;
  17.  
  18.   task body T_T_listen is
  19.      Is_Init : Boolean := False;
  20.      Serv : Socket_Type;
  21.      Sock : Socket_Type;
  22.      Address: Sock_Addr_Type;
  23.      Channel : Stream_Access;
  24.   begin
  25.      loop
  26.         select
  27.            when not Is_Init =>
  28.            accept Init(Socket : in out Socket_Type;
  29.                        Server : Socket_Type) do
  30.               if Socket = No_socket then
  31.                  raise Program_Error;
  32.               end if;
  33.               Serv := Server;
  34.               Sock := Socket;
  35.               Address.Addr := Addresses(Get_Host_By_Name(Host_Name));
  36.               Address.Port := 5876;
  37.               Bind_socket(Server, Address);
  38.               Is_Init := True;
  39.            end Init;
  40.         or
  41.            delay 0.0;
  42.            if Is_Init then
  43.               Listen_Socket(Serv);
  44.               Accept_Socket(Serv, Sock, Address);
  45.               Channel := Stream(Sock);
  46.               Text_Io.Put_Line("Message from " & Image(Get_Address(Channel)));
  47.               Text_Io.Put(String'Input(Channel));
  48.            end if;
  49.         end select;
  50.      end loop;
  51.   exception
  52.      when E : Program_Error =>
  53.         Text_Io.Put_Line(Exception_Name(E) & ": " & Exception_Message(E));
  54.   end T_T_Listen;
  55.  
  56.   task type T_T_Server_Child is
  57.      entry Init;
  58.      entry Stop;
  59.   end T_T_Server_Child;
  60.  
  61.   task body T_T_Server_Child is
  62.      Server : Socket_Type;
  63.      Socket : Socket_Type;
  64.      Listened : T_T_Listen;
  65.      Is_Init : Boolean := False;
  66.      End_Of_Child : Boolean := False;
  67.   begin
  68.      while not End_Of_Child loop
  69.         select
  70.            accept Stop do
  71.               abort Listened;
  72.               Close_socket(Server);
  73.               Close_socket(Socket);
  74.               End_Of_Child := True;
  75.            end Stop;
  76.         or
  77.            when not Is_Init =>
  78.            accept Init do
  79.               Create_Socket(Server);
  80.               Listened.Init(Socket,Server);
  81.               Is_Init := true;
  82.            end Init;
  83.         end select;
  84.      end loop;
  85.   end T_T_Server_Child;
  86.  
  87.   The_World : array(1..2) of T_T_Server_Child;
  88.  
  89. begin
  90.   for Server in The_World'Range loop
  91.      The_World(Server).Init;
  92.   end loop;
  93.   delay 2.0;
  94.   for Server in The_World'Range loop
  95.      The_World(Server).Stop;
  96.   end loop;
  97. end Main;


Donc, ça ne s'arrete pas  :heink: . et ça ne fonctionne pas très bien, je cherche à servir deux clients à la fois


Message édité par Profil supprimé le 23-12-2006 à 08:59:43
n°1495584
Profil sup​primé
Posté le 23-12-2006 à 09:22:17  answer
 

je ne comprend pas, après l'initialisation, le tache listened doit entrer dans le select or delay 0.0 ... et libérer la tache serveur_enfant, qui peut alors entrer dans le accept stop et avorter listened ... ça doit encore planter sur un listen_socket(); j'ai vraiement des difficultés avec les tache et les arrets de procedures bloquantes.  :pfff:  
Vraiement personne pour me filer un coup de main ou vous etes tous en vacances  
 
Joyeuses fêtes  :hello:

n°1495590
Profil sup​primé
Posté le 23-12-2006 à 09:49:11  answer
 

j'ai fait quelque modif mais ça tourne tourjours pas  
 
a substituer ,
 

Code :
  1. type Listened_Access is access T_T_Listen;
  2.  
  3.   task body T_T_Server_Child is
  4.      Listened : Listened_Access;
  5.      Is_Init : Boolean := False;
  6.      End_Of_Child : Boolean := False;
  7.   begin
  8.      while not End_Of_Child loop
  9.         select
  10.            when Is_Init =>
  11.            accept Stop do
  12.               abort Listened.all;
  13.               End_Of_Child := True;
  14.            end Stop;
  15.         or
  16.            when not Is_Init =>
  17.               accept Init(Id : Natural) do
  18.                  Listened := new T_T_Listen;
  19.               Listened.all.Init(Id);
  20.               Is_Init := True;
  21.               end Init;
  22.         or
  23.            delay 0.0;
  24.              null;
  25.         end select;
  26.      end loop;
  27.   end T_T_Server_Child;


c'est mieu mais ça marche toujour pas, d'ailleur, il y a un truc louche, c'est bon signe,  
 
edit ::= enfin  même avec un Set_Socket_Option(Serv, Socket_Level, (Reuse_address, True)); ça passe pas , la je seche, je plante à la deuxieme initialisation quelque que soit le 'rang de The_World. Mauvaise utilisation, on dirais que je ne peut pas ouvrir deux socket Ada sur le même port à la même adresse. c'est louche.


Message édité par Profil supprimé le 23-12-2006 à 10:08:48
n°1495599
Profil sup​primé
Posté le 23-12-2006 à 10:17:35  answer
 

Alors la je ne comprend pas le reseau,  je ne peut pas initilaiser 2 Socket Ada sur les le même port, comment je fait pour servir deux clients simultanément ?
 
edit : peut-etre avec des threads système  :heink:

Message cité 1 fois
Message édité par Profil supprimé le 23-12-2006 à 11:24:19
n°1495624
Profil sup​primé
Posté le 23-12-2006 à 12:19:27  answer
 


 
j'ai fait ça,  
 
à substitué

Code :
  1. type child_Access is access all T_T_Server_Child;
  2.  
  3.   type Server_Access is access all T_T_Server_Child;
  4.  
  5.   package P_Server_Access_Convertion is
  6.      new Address_To_Access_Conversions(T_T_Server_child);
  7.   use P_Server_Access_Convertion;
  8.  
  9.  
  10.      type Server_Child_Threaded is
  11.      record
  12.         Id : Task_Id;
  13.         Child : object_pointer;
  14.         S_address : System.Address;
  15.      end record;
  16.  
  17.   The_World : array(1..2) of Server_Child_threaded;
  18.  
  19. begin
  20.   Text_Io.Put_Line("Begin ..." );
  21.   for id in The_World'Range loop
  22.      
  23.      Text_Io.Put_Line("entering The world ..." );
  24.      
  25.      The_World(id).Child := new T_T_Server_Child;
  26.      
  27.      The_World(id).S_Address :=
  28.     Create_Thread(To_Address(The_World(id).child),null,2048,14);
  29.      
  30.      The_World(id).Child.Init(Id);
  31.      
  32.      Text_Io.Put_Line("exiting The world ..." );
  33.   end loop;
  34.  
  35.   delay 100.0;
  36.  
  37.   for id in 1..The_World'length loop
  38.      The_World(id).Child.Stop;
  39.   end loop;
  40.  
  41. end Main;


 mais ça marche pas non plus ... même symptome  :heink:

n°1495707
Profil sup​primé
Posté le 23-12-2006 à 20:42:20  answer
 


je suis en train de voir comment je peut integrer l'utilisation des sockets dans Fmi-1.0.0/Fmi-Client-0.0.1-beta, bref
j'ai donc ajouté un mode connection_resseau qui permet de se connecter à un serveur, mais la n'ai pas le probleme, enfin si, .... j'ai aussi la command Quit de disponible en mode Connection_Reseau et si je l'appelle simplement le programme s'arrete, le problème, c'est quand je me connecte ... et que je me deconnect, à l'appel suivant de Quit le programme l'ignore.
 
encore un petit code donc ::=
 

Code :
  1. task Mode_Connection_Reseau is
  2.            entry Recevoir(Un : in Character);
  3.         end Mode_Connection_Reseau;
  4.         task body Mode_Connection_Reseau is
  5.            type T_Cmd is (Null_Item, Quit,
  6.                           Connect, Deconnect,
  7.                           Send_Real, Send_Prev, receive);
  8.            function Value(Command : String) return T_Cmd is
  9.               First_Space : positive := 1;
  10.            begin
  11.               while Command(First_Space) /= ' ' and then
  12.                 First_space < Command'Length loop
  13.                  First_Space := First_Space + 1;
  14.               end loop;
  15.               return T_Cmd'Value(Command(Index_Non_Blank(Command)..First_Space));
  16.            exception
  17.               when others =>
  18.                  return Null_Item;
  19.            end Value;
  20.  
  21.            Server_Name : String_Access;
  22.            Address : Sock_Addr_Type;
  23.            Port : Port_Type := 5876;
  24.            Socket : Socket_Type;
  25.            Channel : Stream_Access;
  26.            Connected : Boolean := False;
  27.            Command : T_Cmd;
  28.            Line : String(1..256) := (others => Ascii.Nul);
  29.            Last : Natural := 0;
  30.         begin
  31.            loop
  32.               begin
  33.                  Initialize;
  34.                  while not End_Of_Program loop
  35.                     select
  36.                        accept
  37.                          Recevoir(Un : in Character) do
  38.                           case Un is
  39.                              when Character'Val(10) =>
  40.                                 if Last /= 0 then
  41.                                    case Line(1) is
  42.                                       when others =>
  43.                                          Command := Value(Line(1..Last));
  44.                                          case Command is
  45.                                             when Null_Item =>
  46.                                                declare
  47.                                                   Char : Character;
  48.                                                begin
  49.                                                   New_Line;
  50.                                                   Res := System(Line(1..Last) & Ascii.nul);
  51.                                                   Put("(press any key to continu)" );
  52.                                                   Get_Immediate(Char);
  53.                                                end;
  54.                                             when Quit =>
  55.                                                if Data /= null then
  56.                                                   P_Reel.Save(Data.all);
  57.                                                end if;
  58.                                                if Echeances /= null then
  59.                                                   P_Previsionnel.Save(Prev.all);
  60.                                                end if;
  61.                                                Close_Socket(Socket);
  62.                                                End_Of_Program := True;
  63.                                             when Connect =>
  64.                                                if not Connected then
  65.                                                   Server_Name := new String'
  66.                                                     (Line(Index(Line," " )+1..Last));
  67.                                                   Address.Addr :=
  68.                                                     Addresses(Get_Host_By_Name(Server_Name.all));
  69.                                                   Address.Port := Port;
  70.                                                   Create_Socket(Socket);
  71.                                                   Set_Socket_Option
  72.                                                     (socket,
  73.                                                      Socket_Level,
  74.                                                      (Reuse_Address, True));
  75.                                                   Put_Line("Please, wait 10 seceonds." );
  76.                                                   Connect_Socket(Socket, Address);
  77.                                                   Channel := Stream (Socket);
  78.                                                   Connected := True;
  79.                                                end if;
  80.                                             when Deconnect =>
  81.                                                Close_Socket(Socket);
  82.                                                Connected := False;
  83.  
  84.                                             when Send_Real =>
  85.                                                null;
  86.                                             when Send_Prev =>
  87.                                                null;
  88.                                             when Receive =>
  89.                                                null;
  90.                                          end case;
  91.                                    end case;
  92.                                 end if;
  93.                                 Last := 0;
  94.                                 Line := (others => Ascii.Nul);
  95.                              when Ascii.Del | Ascii.Bs =>
  96.                                 if last /= 0 then
  97.                                    Line(last) := ' ' ;
  98.                                    last := last - 1 ;
  99.  
  100.                                 else
  101.                                      Put(Ascii.Bel);
  102.                                 end if;
  103.                              when others =>
  104.                                 Last := Last + 1;
  105.                                 Line(Last) := Un;
  106.                           end case;
  107.                        end Recevoir;
  108.                     or
  109.                        delay(0.0);
  110.                        if Mode = Connection_reseau then
  111.                           Res := System("clear" & Ascii.Nul);
  112.                           Put_line("--------------------------------------------------------------------------------" );
  113.                           Put_line("--                         Mode connection_reseau                             --" );
  114.                           Put_line("--------------------------------------------------------------------------------" );
  115.                           Put_line("Connected : " & Boolean'Image(Connected));
  116.                           New_Line(19);
  117.                           Put(Line(1..Last));
  118.                           delay 0.075;
  119.                        end if;
  120.                     end select;
  121.                  end loop;
  122.                  Finalize;
  123.               exception
  124.                  when E : Gnat.Sockets.Host_error =>
  125.                     Put_Line
  126.                       (Exception_Name (E) &
  127.                        ": " &
  128.                        Exception_Message (E));
  129.                     delay(5.0);
  130.               end;
  131.               exit;
  132.            end loop;
  133.         end Mode_Connection_reseau;


 :??:

n°1495711
Profil sup​primé
Posté le 23-12-2006 à 20:58:32  answer
 

A, quel naazzzeeee, je doit lever une exception, sauter la reinitialisation, enfin le boxon quoi  :pfff:  
 
Merci, désolé  :heink:  .... re Joyeuses fêtes
 
edit : Noonn euuuh, c'est pas ça, zuteeee !


Message édité par Profil supprimé le 23-12-2006 à 21:04:30
n°1495728
Profil sup​primé
Posté le 23-12-2006 à 22:16:49  answer
 

Bon, je ne sais pas pourquoi j'étais planté la, mais j'ai trouvé une solution .. j'ai ajouter un if connected  pour le close_socket dans le quit case et ça roule. Enfin, c'est une enigme.

n°1495742
Profil sup​primé
Posté le 23-12-2006 à 23:23:57  answer
 

Garçon ! La suite !
 
pour le client j'ai fait ça  

Code :
  1. when Send_Real =>
  2.        for I in 1..Nombre_D_Operation(1) loop
  3.             Lire_Operation(1,Operation,I);
  4.             T_operation'Output(Channel,Operation);
  5.        end loop;


 
et pour le serveur, j'ai fait ça

Code :
  1. with GNAT.Sockets; use GNAT.Sockets;
  2. with Ada.Text_IO;
  3. with Ada.Exceptions; use Ada.Exceptions;
  4. with P_Types_Banquaire;
  5. use P_Types_Banquaire;
  6. procedure main is
  7.  
  8.        task Pong is
  9.           entry Start;
  10.        end Pong;
  11.  
  12.        task body Pong is
  13.           Address  : Sock_Addr_Type;
  14.           Server   : Socket_Type;
  15.           Socket   : Socket_Type;
  16.           Channel  : Stream_Access;
  17.           End_Of_Server : Boolean := False;
  18.        begin
  19.           accept Start;
  20.  
  21.           Address.Addr := Addresses (Get_Host_By_Name (Host_name), 1);
  22.  
  23.           Address.Port := 5876;
  24.           Ada.Text_Io.Put_Line("Address is " & Image(Address));
  25.  
  26.           Create_Socket (Server);
  27.  
  28.           Set_Socket_Option
  29.             (Server,
  30.              Socket_Level,
  31.              (Reuse_Address, True));
  32.           Bind_Socket (Server, Address);
  33.           delay 0.2;
  34.           Listen_Socket (Server);
  35.           loop
  36.              Accept_Socket(Server,Socket,address);
  37.              Channel := Stream (socket);
  38.              loop
  39.                 declare
  40.                    Message : T_operation := T_operation'Input (Channel);
  41.                 begin
  42.                    Ada.Text_IO.Put_Line("Message from " &
  43.                                         Image(Get_Address(channel)) & " ::=" );
  44.                    Ada.Text_IO.Put_Line (Message.libelle);
  45.                 end;
  46.              end loop;
  47.           end loop;
  48.           Close_Socket (Server);
  49.        end Pong;
  50. begin
  51.      Initialize (Process_Blocking_IO => false);
  52.      Pong.Start;
  53.      Finalize;
  54. end main;


C'est peut-etre pas au point encore mais il m'arrive un truc louche ... quand je deconnecte le client, le serveur(la tache pong) sort de toutes les boucles  :heink: .... c'est quoi s'tembrouilleeee  


Message édité par Profil supprimé le 23-12-2006 à 23:29:44
n°1495755
Profil sup​primé
Posté le 24-12-2006 à 00:38:18  answer
 

Alors, j'ai fait ça
à substituer

Code :
  1. type Server_Access is access all Pong;
  2.        Server : Server_Access;
  3.        Current_Task_id : Task_Id := Null_Task_Id;
  4. begin
  5.   loop
  6.      if Current_Task_Id = Null_Task_Id or else
  7. --        Is_terminated(Current_Task_Id) then
  8.         not Is_Callable(Current_Task_Id) then
  9.         Server := new Pong;
  10.         Initialize (Process_Blocking_IO => false);
  11.         Server.all.Get_Id(Current_Task_Id);
  12.         Server.all.Start;
  13.         Finalize;
  14.      end if;
  15.      delay(1.0);
  16.   end loop;
  17. end main;


mais maintenant, à la deconnection, la boucle ci-dessu reprend avec une condition toujours vrai  :heink:

n°1495764
Profil sup​primé
Posté le 24-12-2006 à 09:40:34  answer
 

[:jim's]  
 
C'est quoi cette sortie à la Garry Grant ...?  
Toujours, sur les Gnat.Sockets,
si je suis en attente de donnée coté serveur et que je ferme la connection coté client, coté serveur je sort directement de l'unité englobante  ... sans passer par la case end; et sans me prévenir .. surtout, c'est un comble, je suis pas sur que ça corresponde bien au spécification d'Ada.

n°1495796
Profil sup​primé
Posté le 24-12-2006 à 13:02:47  answer
 


 
Je ne comprend pas pourquoi Is_Callable() ou Is_Terminated() ne fonctionne pas  :ouch: ... je dis ça mais le problème a l'air plus serieu
 
les sources complètes ... Fmi-client-0.0.1-beta.tgz et Fmi-server-0.0.1-beta.tgz
 
Pour tester le systeme client/serveur, coté serveur, lancez main, coté client, lancer main -d reel, utiliser la touche tabulation pour passser en mode Connection_Reseau, tapez 'connect "nom du domaine du serveur"' puis 'send_real 1'. Les données du compte réel 1 sont alors transmisent au serveur.
 
Ces programmes utilises le port 5876


Message édité par Profil supprimé le 24-12-2006 à 13:08:06
n°1495799
Profil sup​primé
Posté le 24-12-2006 à 14:06:59  answer
 

J'ai changé de stratégie coté serveur ... mais maintenant je reçois 4 fois les donnée envoyées  :pt1cable:  
edit ::= j'ai fait une sieste, maintenant ça à l'aire de marcher  :lol:  
 
 
Le serveur ::=  

Code :
  1. with Ada.Text_Io;
  2. use Ada.Text_Io;
  3. with Ada.Task_Identification;
  4. use Ada.Task_Identification;
  5. with GNAT.Sockets; use GNAT.Sockets;
  6. with Ada.Exceptions; use Ada.Exceptions;
  7. with P_Types_Banquaire;
  8. use P_Types_Banquaire;
  9. with Ada.Unchecked_Deallocation;
  10. procedure main is
  11.  
  12.  
  13.   task type Pong is
  14.      entry Start(Socket : in out Socket_Type);
  15.   end Pong;
  16.   task body Pong is
  17.      Channel  : Stream_Access;
  18.      Nombre_D_Operation : positive;
  19.   begin
  20.      accept Start(Socket : in out Socket_Type) do
  21.      Channel := Stream (socket);
  22.      Nombre_D_Operation := positive'Input(Channel);
  23.      for I in 1..Nombre_D_Operation loop
  24.         declare
  25.            Message : T_operation := T_operation'Input (Channel);
  26.         begin
  27.            Ada.Text_IO.Put_Line("Message from " &
  28.                                 Image(Get_Address(channel)) & " ::=" );
  29.            Ada.Text_IO.Put_Line (Message.libelle);
  30.         end;
  31.      end loop;
  32.      end Start;
  33.   end Pong;
  34.   type Serv_Access is access Pong;
  35.   Serv : Serv_access;
  36.   Address  : Sock_Addr_Type;
  37.   Server   : Socket_Type;
  38.   Socket   : Socket_Type;
  39. begin
  40.   Serv := new Pong;
  41.   Address.Addr := Addresses (Get_Host_By_Name (Host_name), 1);
  42.   Address.Port := 5876;
  43.   Create_Socket (Server);
  44.   Set_Socket_Option
  45.     (Server,
  46.      Socket_Level,
  47.      (Reuse_Address, True));
  48.   Initialize (Process_Blocking_IO => false);
  49.   Bind_Socket (Server, Address);
  50.   delay 0.2;
  51.   Ada.Text_Io.Put_Line("Listen ..." );
  52.   Listen_Socket (Server);
  53.   Ada.Text_Io.Put_Line("Accetp ..." );
  54.   Accept_Socket(Server,Socket,address);
  55.   Put_Line("Starting server ... " );
  56.   Ada.Text_Io.Put_Line("Address is " & Image(Address));
  57.   Serv.Start(Socket);
  58.   loop
  59.      Close_Socket(Socket);
  60.      delay 0.2;
  61.      Ada.Text_Io.Put_Line("Listen ..." );
  62.      Listen_Socket (Server);
  63.      Ada.Text_Io.Put_Line("Accept ..." );
  64.      Accept_Socket(Server,Socket,address);
  65.      Put_Line("Starting server ... " );
  66.      Ada.Text_Io.Put_Line("Address is " & Image(Address));
  67.      Serv := new Pong;
  68.      Serv.Start(Socket);
  69.      delay(2.0);
  70.   end loop;
  71.   Close_Socket(Server);
  72.   Finalize;
  73. end main;


Message édité par Profil supprimé le 24-12-2006 à 16:17:52
n°1495837
Profil sup​primé
Posté le 24-12-2006 à 17:16:43  answer
 

Il ne me reste plus qu'a trouver comment servir plusieurs clients à la fois !
 
arrrr, il suffit que j'ecrive ça et ça ne fonctionne plus  :o
 
 
 :lol: un pitre ... je suis un pitre  [:dawa_neowen]

Message cité 1 fois
Message édité par Profil supprimé le 24-12-2006 à 17:34:32
n°1495842
Profil sup​primé
Posté le 24-12-2006 à 17:54:49  answer
 

Pour poursuivre !
 
Avant de faire ma sauce concernant le tranfert de fichiers, je voudrait construire une base de données concernant la consomationdes menages, faire des statistique et communiquer ces derniere au ménage en question.
Pour ce faire, je doit etoffer la base de mon programme Fmi en declarant un type enuméré T_Rubrique.
 
La nature de T_rubrique doit etre représentative de la nature des produits consomés IRL.
 
je suis donc la pour vous demander, afin d'etablire une liste exaustive des produit que vous consomé, de bien vouloir m'aider. Etablir une classe n'est pas chose aisé .... le debat est possible ici.
 
Voila comment je perçoit le type T_Rubrique ::=
 
type T_rubique is (Transport, vacance, nourriture, logement, energie, divertissement, hygienne, accident, ... recherche, habillement, ameublement, frais_banquaire, procés_verbaux, impots, perte, santé ); oui dans la consomation des menage il y a aussi 'recherche'  :heink:  
 
je maintiendrai le type T_Rubrique à jour dans ce message.
 
Merci de votre participation.

Message cité 1 fois
Message édité par Profil supprimé le 27-12-2006 à 11:20:22
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
Petite programme de calculatrice en C[VB.NET] Creer une petit navigateur web [Résolu]
[help needed] gros problème avec flash[réglé] Aide sur un petit script.
un petit script a essayerNews et tableau en array : un peu trop gros
Petit soucis pour téléchargement d'un fchierNavigation par page 10*10, petit soucis
[EasyPhp] Gros problème de lenteur avec MySQLRecherche algo ou programme pour détection de plan
Plus de sujets relatifs à : Petit programme pour faire ses comptes ; C'est quoi ce gros bug


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)