Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment communiquer avec socket UDP

    12 août 2024 à 20:30:10

    Bonsoir, tout le monde! voila depuis quelques que jours je  travail sur un programme qui doit faire communiquer en socket UDP un client et un serveur,ecrit en Ada. le serveur doit envoyer un nombre entier au client,qu'il (le client) doit afficher a l'ecran. en mode TCP ca fonctionne tres Bien Mais en UDP j'arrive pas.  le code compile Bien sans erreur au debut Mais quand je lance le programme je recoit une exception. je vous donne le code.
    Procedure Programme_Principal is
    
    Task Serveur;
    
    Task body Serveur is
    
    Socket : Socket_type;
    Adresse : Sock_Addr_type;
    Channel : Stream_access;
    
    begin
    
    Create_Socket (Socket,
                  Family_Inet,
                  Socket_Datagram);
    --  ^ Creation de la socket en mode UDP.
    
    Adresse.Addr := Addresses (Get_host_by_Address (Any_Inet_Addr));
    --  ^ Adresse du serveur.
    
    Adresse.Port := 5566;
    --  ^ Numero de Port du serveur.
    
    Bind_Socket (Socket,Adresse);
    --  ^ lie la socket serveur a son adresse.
    
    
    --  # Envoyer Message
    
    Adresse.Addr := Addresses (Get_host_by_address (Any_Inet_addr));
    --  ^ adresse du client.
    Adresse.Port := 5567;
    --  ^ Numero de port du client.
    
    Channel := Stream (Socket,Adresse);
    
    declare
    
    -- # ici je declare un entier en cours de programme
    
    entier : Integer := 4775;
    
    begin
    
    Integer'Output (Channel,entire);
    --  ^ envoie du message
    end;
    --  fin du bloc
    Close_Socket (Socket);
    --  ^ fermeture de la socket.
    
    end server;
    
    --  # Cote client
    
    Task client;
    
    task body client is
    
    Socket : Socket_type;
    Adresse : Sock_Addr_type;
    Channel : Stream_access;
    
    begin
    
    
    Create_Socket (Socket,
                  Family_Inet,
                  Socket_Datagram);
    --  ^ Creation de la socket en mode UDP.
    
    Adresse.Addr := Addresses (Get_host_by_Address (Any_Inet_Addr));
    --  ^ Adresse du client.
    
    Adresse.Port := 5567;
    --  ^ Numero de Port du client.
    
    Bind_Socket (Socket,Adresse);
    --  ^ lie la socket client a son adresse.
    --  # Envoyer Message
    
    Adresse.Addr := Addresses (Get_host_by_address (Any_Inet_addr));
    --  ^ adresse du serveur.
    Adresse.Port := 5566;
    --  ^ Numero de port du serveur.
    
    Channel := Stream (Socket,Adresse);
    
    declare
    
    -- # ici je declare un entier en cours de programme
    
    entier : Integer := Integer'Input (Channel);
    --  ^ reception du message
    
    begin
    
    Put (entier);
    --  ^ affichage du message recu.
    end;
    -- ^ fin du bloc
    Close_Socket (Socket);
    --  ^ fermeture de la socket.
    
    end client;
    
    --  # Programme principal
    
    begin
    Initialize;
    finalize;
    end Programme_principal;
     
    
     quand je lance le programme je recoit l'exception 
    raised tasking_error : system.tasking.stages.activate_taks : failure during activation
    j'ai deja tout (enfin presque) essayer, les methodes send_socket et receive_socket ne marche pas. si quelqu'un peut m'aider a trouver une solution a ce (petit) probleme. je serai ravi.
    • Partager sur Facebook
    • Partager sur Twitter

    Comment communiquer avec socket UDP

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown