Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
2022 connectés 

 


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

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

n°1502493
jovalise
Par l'anneau de l'i.a.
Posté le 13-01-2007 à 11:33:50  profilanswer
 

Reprise du message précédent :
Up  [:dawa_neowen]  

jovalise a écrit :

Bonjour, c'est pas tré clair, je suis désolé  
j'ai un petit problème de connection reseau full-duplex en reseau local,
Normalement la configurartion ad'hoc pour le reseau Internet ne permet pas une connection en reseau local.  
 
j'ai un client, un serveur, qui se comporte tout deux en client serveur reciproque (enfin presque), le client  demande une connection au serveur dans un premier temps, puis lui accepte une connection à son tour que le serveur s'enpresse de li demander, j'aobtien une connection sur deux port sur les quelques chacun est le client/serveur de l'autre. Cette mesur n'est pas indispensable, elle est même peut-etre mal adapté, mais j'obitient tout de même deux canneaux de communication sur lmes quel je fait du full duplex. Cette architecture sur deux deux canneau est peut-etre normal, mais en fait, j'ai fait ce choix parce-que, a priori, les services proposé par le langage Ada ne permete pas d'envoyer et de recevoir des donnée si simultanément sur un même ports.
 
J'utilise sur le serveur, une function Get_Address, (stream : stream_access) return Sock_Addr_Type, que je converti en addresse Inet qui est effectivement l'addresse du client pour lui demander la connection full-duplex.
Mais sur mon reseau local, ça ne fonctionne pas, je me demande si c'est normale.
 
Deux solution à mon problème ...  
1 : je configure un reseau avec deux sous réseaux avec deux machines si c'est possible ! ... j'en ai que deux  
2:  on fait des test avec vous sur le net
 
 
Je vous propose donc de repondre soit à la premiere question, soit de telecharger et de compilier les sources du ou des programmes client et serveur ecrit avec la langage Ada, et de tester le ou les programmes.  
 
si il est possible de configurer deux sous reseau avec seulement deux machines+un modem-routeur en fait merci de me rappeler comment  :jap:  
 
sI vous demarer simplement le client, vous vous inscrivez avec la commande "inscription" puis vous tentez un connection full-duplex après réception de votre mots de passe à votre addresse email avec la commande "login denimes.net" qui est le serveur d'inscription (en dur pour le moment).



---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
mood
Publicité
Posté le 13-01-2007 à 11:33:50  profilanswer
 

n°1502771
jovalise
Par l'anneau de l'i.a.
Posté le 14-01-2007 à 17:15:46  profilanswer
 

Bonjour,
J'ai fait mes test en connection full-duplex en local, j'aimerai bien fair des test sur le net.
 
Donc, j'ai overt une connection full-duplex entre client et serveur.
En fait, bien que l'architecture permete du full-duplex, en fait je m'en sert pour faire de la transimition automatique et j'ai à ce sujet un problème de mise à jour de l'information.
 
j'ai un paquetage P_Main ::=  

Code :
  1. Nombre_De_Connecte,
  2.   Nombre_De_Root,
  3.   Nombre_De_Forum,
  4.   Nombre_De_Chat,
  5.   Nombre_D_Ai,
  6.   Nombre_D_inscrit: natural := 0;
  7.   Root_Avaible : Boolean := false;
  8.   function Root return String;


une tache exclave, dans un thread_serveur, Output , qui transmet l'information::=

Code :
  1. task Output is
  2.                                          entry Stop;
  3.                                          entry set(Mode : T_Mode_Forum);
  4.                                       end Output;
  5.  
  6.                                       task body Output is
  7.                                          End_Of_Output : Boolean := False;
  8.                                          Current_Mode : T_Mode_Forum := Auto;
  9.                                       begin
  10.                                          while not End_Of_Output Loop
  11.                                             select
  12.                                                accept set(Mode : T_Mode_Forum) do
  13.                                                   Current_Mode := Mode;
  14.                                                end set;
  15.                                             or
  16.                                                accept Stop do
  17.                                                   End_Of_Output := True;
  18.                                                end Stop;
  19.                                             or
  20.                                                delay 0.125;
  21.                                                case Current_Mode is
  22.                                                   when Auto =>
  23.                                                      Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  24.                                                     if P_Main.Is_Avaible(P_Main.Root_Avaible) then
  25.                                                        String'Output(Channel_Out_root,P_Main.root);
  26.  
  27.                                                        delay(5.0);
  28.                                                        P_Main.Root_Avaible := False;
  29.                                                     end if;
  30.                                                   when others =>
  31.                                                     null;
  32.                                                end case;
  33.                                             end select;
  34.                                          end loop;
  35.                                       end Output;


et le or delay() d'une tache client, qui receptionne l'information ::=  

Code :
  1. if Boolean'Input(Channel_In_root) then
  2.                                     Free(Current_Root);
  3.                                     Current_Root := new String' (String'Input(Channel_In_root));
  4.                                  end if;


 
donc le serveur regarde dans P_Main si une information est disponible, si l'information est disponible je la transmet au client qui l'attend alors.
 
 
je fait des operations dans le thread_server sur le P_main du genre  
 
                                    P_Main.Nombre_De_forum := P_Main.Nombre_De_forum - 1;
                                    P_Main.Root_Avaible := True;
 
                                    P_Main.Nombre_De_chat := P_Main.Nombre_De_chat + 1;
                                    P_Main.Root_Avaible := True;
                                    P_Main.Chat_Avaible := True;
 
 
le problème c'est que l'information arrive au client un nombre grandissant de secondes apères modification des données de P_Main
 
Est-ce normal ? Quel est le problème exactement ... quelle(s) solution à ce retard grandissant du délais de transmition de l'information ?
 
Merci pour vos reponse  :jap:
 
 
edit : les sources (pour linux) ::= client et serveur


Message édité par jovalise le 15-01-2007 à 09:15:48

---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1503263
jovalise
Par l'anneau de l'i.a.
Posté le 15-01-2007 à 17:55:49  profilanswer
 

j'ai fat ça pour palier à certain problème
C'est le or delay de la tache Output du mode root

Code :
  1. delay 0.035;
  2.                                                case Current_Mode is
  3.                                                   when Auto =>
  4.                                                      if P_Main.Root_Avaible then
  5.                                                         if not Servi then
  6.                                                            Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  7.                                                            String'Output(Channel_Out_root, P_Main.root);
  8.                                                           Servi := True;
  9.                                                         else
  10.                                                            Boolean'Output(Channel_Out_root,false);
  11.                                                         end if;
  12.                                                      else
  13.                                                         Servi := False;
  14.                                                         Boolean'Output(Channel_Out_root,false);
  15.                                                      end if;
  16.                                                   when others =>
  17.                                                     null;
  18.                                                end case;


Theoriquement ça doit avoir pour effet de ne transmettre l'information, le string'output, qu'une fois pas session de disponibilité de l'information ... ça à des inconveniant, j'y travail .... mais pour ce code, qui ne marche pas en fait, je voulais votre coup d'oeuil ... avant que je debug  :whistle:


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1503360
jovalise
Par l'anneau de l'i.a.
Posté le 15-01-2007 à 21:10:00  profilanswer
 

j'ai fait ça :=  

Code :
  1. delay 0.035;
  2.                                                case Current_Mode is
  3.                                                   when Auto =>
  4.                                                      if P_Main.Root_Avaible then
  5.                                                        if not Servi then
  6.                                                            Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  7.                                                            String'Output(Channel_Out_root, P_Main.root);
  8.                                                           Servi := True;
  9.                                                           Expire := Clock+5.0;
  10.                                                         else
  11.                                                            Boolean'Output(Channel_Out_root,false);
  12.                                                         end if;
  13.                                                      else
  14.                                                         if Clock > Expire then
  15.                                                            Servi := False;
  16.                                                         end if;
  17.                                                         Boolean'Output(Channel_Out_root,false);
  18.                                                      end if;
  19.                                                   when others =>
  20.                                                     null;
  21.                                                end case;


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1503450
jovalise
Par l'anneau de l'i.a.
Posté le 16-01-2007 à 07:52:55  profilanswer
 

Bon ça marchait pas quand même, alors j'ai changé de stratégie, ... je cherche, ... et j'ai simplement placé de if clock > expire dans le or delay du client ... mais la pour l'instant ça n'a pas l'air de fonctionner et en plus je me tape une erreur de segmentation, bref.


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1503451
jovalise
Par l'anneau de l'i.a.
Posté le 16-01-2007 à 08:14:07  profilanswer
 

J'ai un gros problème, je reçois des message du passé,
Je fais un mise à jour toute les 5 secondes est je reçois des message qui s'incremente de quelque millieme,
Y a un truc louche.


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1503454
jovalise
Par l'anneau de l'i.a.
Posté le 16-01-2007 à 08:35:11  profilanswer
 

Ca y est, j'ai trouvé ... enfait je croyais avoir compris que string'output et string'input etaient bloquant, qu'il s'attendaient l'un l'autre mais pas dutout, donc j'ai placé un delay de 5 secondes dans le or delay de la tache output et ça tourne ... si non le reseau fesait tampon en fait.


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1504441
jovalise
Par l'anneau de l'i.a.
Posté le 17-01-2007 à 21:59:53  profilanswer
 

Bonjour, bonsoir,
 
j'ai un petit souci de Socket_Error encore.
Je n'arrete pas de prendre des "Address alredy in use" alors, que je n'en utilise pas.
De plus le prog a fonctionné, puis à present ça ne fonctionne plus.
 
Donc, c'est un client reseau, utilisant Gnat.Sockets qui offre 4 connections au serveur pour obtenir 5 connections.
Mais au premier bind côté client, je leve l'erreur susdite.
 
les sources ::= main.adb.html
 
Merci
 


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
n°1676036
jovalise
Par l'anneau de l'i.a.
Posté le 24-01-2008 à 09:44:13  profilanswer
 

Yep, désolé, pour l'absence des pages liées à ce topic, ... j'ai cassé le disque cible.
 
Merci de votre compréhension  :whistle:


---------------
Là où l'Homme ne pourra aller, Ada ira. Nouveau: Le net de jovalise
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Suivante

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


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware