Appearance
question:Comparaison de la programmation d'applications rĂ©parties avec TCP et avec CORBA Pour comparer les deux modes de communication on Ă©tudie une application de commerce Ă©lectronique, qui consiste Ă obtenir dâun site serveur distant une cotation pour une valeur boursiĂšre. La solution en mode message utilise le niveau transport TCP avec lâinterface socket et la solution en mode RPC utilise lâapproche objets rĂ©partis CORBA. Ce problĂšme ne traite que des comportements dâun client. Il nâest pas nĂ©cessaire de comprendre trĂšs en dĂ©tail les codes prĂ©sentĂ©s en C ou en C++ pour rĂ©pondre aux questions dâordre gĂ©nĂ©ral concernant les aspects rĂ©seaux des deux solutions. A) Utilisation du niveau transport TCP avec lâinterface Socket Lâapplication considĂ©rĂ©e est celle dâun mode client serveur basique avec un message requĂȘte de demande de cotation et un message rĂ©ponse contenant le cours de bourse. On identifie donc comme premier Ă©lĂ©ment du protocole (message et donnĂ©e Ă Ă©changer dans le message) une requĂȘte qui comporte un nom de valeur boursiĂšre Ă coter. Câest une chaĂźne de caractĂšres de longueur variable. La longueur est codĂ©e sur un entier long (valeur maximum 100 octets). La rĂ©ponse comporte la cotation demandĂ©e (codĂ©e pour simplifier sous la forme dâun entier long). Elle comporte aussi un code rĂ©ponse entier au cas ou des erreurs auraient rendu lâopĂ©ration impossible. Les structures de donnĂ©es Ă©changĂ©es dans les messages en langage C sont donc dĂ©crites comme suit : #define MAXSTOCKNAMELEN 100 struct Quote_Request { long len; /* Longueur de la requĂȘte */ char name[MAXSTOCKNAMELEN]; /* Nom de la valeur Ă coter */ }; struct Quote_Response { long value; /* Cours de la valeur */ long errno; /* 0 si succĂšs, code dâerreur sinon */ }; On rassemble, dans une procĂ©dure utilisĂ©e par le client (connect_quote_server), les instructions nĂ©cessaires pour la mise en connexion du client avec le serveur, selon les primitives de lâinterface socket. - En entrĂ©e de la procĂ©dure, server est une chaĂźne de caractĂšres qui dĂ©finit le nom du service de cotation. - En entrĂ©e de la procĂ©dure, port contient le numĂ©ro de port du service de cotation. - En rĂ©sultat HANDLE est un entier qui contient la rĂ©fĂ©rence du descriptif de la socket. typedef int HANDLE; HANDLE connect_quote_server (const char server[], u_short port) { struct sockaddr_in addr; struct hostent *hp; HANDLE sd; /* CrĂ©ation de la terminaison locale */ sd = socket (AF_INET, SOCK_STREAM, 0); /* DĂ©termination adresse du serveur */ hp = gethostbyname(server); /* Remise Ă zĂ©ro de la zone adresse et initialisation adresse du serveur */ memset ((void *) &addr, 0, sizeof addr); addr.sin_family = AF_INET; addr.sin_port = htons (port); memcpy (&addr.sin_addr, hp->h_addr, hp->h_length); /* Ouverture de la connexion avec le serveur */ connect (sd,(struct sockaddr *)&addr, sizeof addr); return sd; } 1) A quoi sert la primitive socket ? Pourquoi utiliser le paramĂštre AF-INET ? Pourquoi utiliser le paramĂštre SOCK-STREAM ? 1pt 2) A quoi sert la primitive gethostbyname. Quel est le nom de lâapplication Internet qui est utilisĂ©e par la primitive gesthostbyname. Quel doit donc ĂȘtre le format dâun nom de service ? 1pt 3) Quel est le rĂŽle de la primitive connect ? 1pt Une seconde procĂ©dure utilisĂ©e par le client send_request rassemble toutes les instructions nĂ©cessaires pour la transmission de la requĂȘte. - En paramĂštre entrĂ©e de la procĂ©dure, sd est le descriptif de la socket. - En paramĂštre entrĂ©e stock_name contient le nom de la valeur boursiĂšre Ă coter. - Il nây a pas de rĂ©sultat (void). void send_request (HANDLE sd ,const char stock_name[]) { struct Quote_Request req; size_t w_bytes; size_t packet_len; int n; /* DĂ©termination longueur du nom de valeur boursiĂšre et */ /* recopie du nom de valeur boursiĂšre dans la requĂȘte */ packet_len = strlen (stock_name); if (packet_len > MAXSTOCKNAMELEN) packet_len = MAXSTOCKNAMELEN; strncpy (req.name, stock_name, packet_len); /* Calcul longueur totale de la requĂȘte et conversion vers lâordre des octets rĂ©seau */ packet_len = packet_len + sizeof req.len; req.len = htonl (packet_len); /* Envoyer le message au serveur */ n = send (sd, ((const char *) &req),packet_len , 0); } 4) Dans la procĂ©dure prĂ©cĂ©dente send_request la primitive htonl est appliquĂ©e Ă la longueur du paquet packet_len pour fabriquer la zone req.len (longueur de la requĂȘte). Htonl (littĂ©ralement âhost to network long integerâ) convertit lâordre des octets de la machine client dans lâordre rĂ©seau. Pourquoi effectuer une telle conversion. Sous quel nom est connu le problĂšme rĂ©solu par htonl? On rassemble dans la procĂ©dure client recv_response la collecte dâun message de rĂ©ponse Ă une requĂȘte de cotation. La structure de donnĂ©e dâun message de rĂ©ponse Quote_Response a Ă©tĂ©dĂ©finie plus haut. 1pt int recv_response (HANDLE sd, long *value) { struct Quote_Response res; recv (sd, (char*) &res, sizeof res, 0); errno = ntohl (res.errno); if (errno > 0) /* Erreur */ return -1; else { /* SuccĂšs */ *value = ntohl (res.value); return 0; } } 5) A quoi servent les primitives ntohl utilisĂ©es dans le code recv_response ? 1pt 6) On souhaite Ă©valuer la solution proposĂ©e de programmation client-serveur en mode message avec les sockets relativement Ă lâassemblage des donnĂ©es dans les messages. Quel est le point de vue adoptĂ© relativement aux conversions dans ce programme (quel est le niveau dâinteropĂ©rabilitĂ© de la solution) ? 1pt B) Utilisation de lâapproche objets rĂ©partis avec Corba On se propose dâĂ©tudier la solution au problĂšme de cotation prĂ©cĂ©dent en utilisant lâapproche objet rĂ©parti CORBA. 7) Rappelez les principes gĂ©nĂ©raux de lâapproche CORBA ? Comment est rĂ©alisĂ©e lâinvocation Ă distance en CORBA ? 2pt Le code IDL suivant dĂ©crit lâaccĂšs au serveur de cotation : module Stock { exception Invalid_Stock {}; interface Quoter { long get_quote (in string stock_name) raises (Invalid_Stock); }; }; 8) A quoi sert la dĂ©claration âinterface Quoterâ. A quoi sert la dĂ©claration âlong get_quote (instring stock_name)â (Ă quoi correspond elle dans le programme socket) ? A quoi sert lâexception exception Invalid_Stock {}; (quâest ce quâelle remplace dans le programme socket) ? 3pts Un programme client CORBA pour lâinvocation du service de cotation est le suivant: int main (int argc, char *argv[]) { // Nom du service de cotation invoquĂ©. const char *name = "Quoter"; Name service_name; service_name.length(1); service_name[0].id = name; // Obtention objet obj invoquĂ© localement (tous les traitements // nĂ©cessaires sont rĂ©sumĂ©s par une procĂ©dure bind_service) Object_var obj = bind_service (argc, argv, service_name); int result = 1; try { // Obtention dâune rĂ©fĂ©rence q sur obj (avec vĂ©rification de type) Quoter_var q = Quoter::_narrow (obj); // Invocation sur obj du service de cotation distante pour la valeur IBM const char *stock_name = "IBM"; long value = q->get_quote (stock_name); // Edition du rĂ©sultat et traitement des erreurs cout << "value of " << stock_name <<"=" << value << endl; result = 0; // Success! } // Exception BAD PARAM si erreur de type dâinterface catch (CORBA::BAD_PARAM) { cerr << "_narrow() failed: " << service_name << " is not a Quoter!"; } catch (Invalid_Stock &) { cerr << stock_name << " is not a valid stock name!n"; } return result; } 9) La requĂȘte âObject_var obj = bind_service (argc, argv, service_name);â permet la crĂ©ation dâun objet local au client âobjâ sur lequel est rĂ©alisĂ© lâinvocation distante. Que est le rĂŽle de obj (quell traitement rĂ©alise lâobjet obj), quel est le point de vue adoptĂ© relativement aux conversions dans ce programme (quel est le niveau dâinteropĂ©rabilitĂ© de la solution) ? 2pts
answer:A) Utilisation du niveau transport TCP avec l'interface Socket 1) La primitive socket sert Ă crĂ©er un point de communication de type socket. Le paramĂštre AF_INET indique que le protocole de communication utilisĂ© est IPv4. 2) La primitive gethostbyname sert Ă rĂ©cupĂ©rer les informations sur un hĂŽte Ă partir de son nom. Le nom de l'application Internet utilisĂ©e est DNS (Domain Name System). Le format d'un nom de service doit ĂȘtre une chaĂźne de caractĂšres. 3) La primitive connect permet d'Ă©tablir une connexion rĂ©seau avec une autre machine spĂ©cifiĂ©e par l'adresse du serveur. 4) La primitive htonl effectue la conversion de l'ordre des octets de la machine client vers l'ordre rĂ©seau. Ce problĂšme est connu sous le nom de "conversion d'endianess". 5) Les primitives ntohl servent Ă convertir l'ordre des octets reçus du rĂ©seau vers l'ordre de la machine cliente. Cela permet de traiter correctement les donnĂ©es reçues. 6) La solution proposĂ©e avec les sockets en mode message ne prend pas en compte l'interopĂ©rabilitĂ©. Les conversions d'ordre des octets (endianess) sont rĂ©alisĂ©es manuellement selon la spĂ©cification du protocole utilisĂ©. B) Utilisation de l'approche objets rĂ©partis avec CORBA 7) L'approche CORBA (Common Object Request Broker Architecture) permet de rĂ©aliser des invocations distantes entre objets rĂ©partis. L'invocation Ă distance en CORBA est rĂ©alisĂ©e en utilisant les interfaces IDL (Interface Definition Language). Les objets distants sont accessibles via un ORB (Object Request Broker) qui s'occupe de la communication entre les objets. 8) La dĂ©claration 'interface Quoter' dĂ©finit une interface avec une seule opĂ©ration 'get_quote' qui prend en paramĂštre un nom de valeur boursiĂšre et retourne un cours de bourse (de type long). L'exception 'Invalid_Stock' est levĂ©e si le nom de valeur boursiĂšre est invalide. 9) L'objet local 'obj' reprĂ©sente l'objet distant (serveur) sur lequel l'invocation distante sera rĂ©alisĂ©e. Il est obtenu en utilisant la procĂ©dure 'bind_service' qui se charge de lier le client au service distant. Dans ce programme, les conversions d'ordre des octets (endianess) sont gĂ©rĂ©es automatiquement par le mĂ©canisme CORBA, assurant ainsi un niveau d'interopĂ©rabilitĂ© Ă©levĂ©.
question:Présentez le modÚle du rapport de la présentation du logiciel
answer:Le modÚle du rapport de la présentation du logiciel est une structure qui doit inclure les éléments suivants : 1. Page de couverture : Cette page contient le titre du rapport, le nom de l'entreprise ou de l'organisation concernée, le nom du projet/logiciel et les informations sur les contributeurs du rapport (noms, titres, affiliations). 2. Table des matiÚres : Cette section répertorie les différentes sections et sous-sections du rapport avec les numéros de page correspondants. 3. Résumé/Introduction : Cette section donne un aperçu général du rapport en présentant le contexte du projet/logiciel, ses objectifs, son importance et les principales conclusions ou résultats obtenus. 4. Description du projet/logiciel : Ce volet explique en détail le projet/logiciel en présentant son objectif, ses fonctionnalités principales, son architecture, les technologies utilisées et toute autre information pertinente sur le projet/logiciel. 5. Méthodologie : Cette section décrit la méthodologie utilisée pour développer le projet/logiciel, y compris les étapes du processus de développement, les outils utilisés, les tests effectués et les procédures de gestion de projet. 6. Résultats : Cette partie présente les résultats obtenus lors de l'utilisation ou du test du logiciel. Elle peut inclure des captures d'écran, des graphiques, des statistiques ou toute autre forme de résultats obtenus et analyse. 7. Discussion : Cette section analyse les résultats et les compare aux objectifs initiaux du projet/logiciel. Elle identifie les points forts et les points faibles du logiciel, les problÚmes rencontrés et les suggestions d'amélioration. 8. Conclusion : Cette partie résume les principales conclusions de l'analyse des résultats et de la discussion. Elle peut également inclure des recommandations pour l'avenir ou des orientations pour de futures améliorations ou développements du logiciel. 9. Références : Cette section répertorie toutes les sources d'information utilisées pour rédiger le rapport, y compris les articles, les livres, les sites web ou tout autre document de référence. 10. Annexes : Cette section contient des informations supplémentaires pertinentes mais non essentielles pour la compréhension du rapport. Cela peut inclure des captures d'écran supplémentaires, des extraits de code, des spécifications techniques détaillées, des exemples de données, etc. Il est important de suivre une structure claire et logique dans la rédaction du rapport de la présentation du logiciel afin de rendre l'information facilement accessible et compréhensible pour le lecteur.
question:Un modĂšle d'acception d'un marche ou d'une offre
answer:Voici un modĂšle d'acceptation d'un marchĂ© ou d'une offre : [Date] [Adresse du fournisseur/entreprise] [Adresse du client] Objet : Acceptation du marchĂ©/offre Cher [Nom du fournisseur/entreprise], Par la prĂ©sente, nous souhaitons officiellement vous informer de notre acceptation de votre marchĂ©/offre, conformĂ©ment aux termes et conditions proposĂ©s dans [document de rĂ©fĂ©rence, par exemple : la proposition commerciale datĂ©e du XX/XX/XXXX]. Nous sommes convaincus que votre proposition rĂ©pond parfaitement Ă nos besoins et attentes. Votre rĂ©putation et votre expertise dans le domaine nous inspirent confiance et nous sommes impatients de collaborer avec vous dans le cadre de ce marchĂ©/offre. Ci-dessous, vous trouverez les principales conditions de notre acceptation : 1. Description du marchĂ©/offre : [DĂ©crire briĂšvement les principaux Ă©lĂ©ments du marchĂ©/offre, y compris les produits/services concernĂ©s]. 2. Prix et modalitĂ©s financiĂšres : [SpĂ©cifier le prix convenu, les modalitĂ©s de paiement et toutes autres conditions financiĂšres pertinentes]. 3. DĂ©lais de livraison/engagement : [Indiquer les Ă©chĂ©ances et les dĂ©lais attendus pour la livraison des produits ou la rĂ©alisation des services]. 4. Conditions gĂ©nĂ©rales : [Mentionner les conditions gĂ©nĂ©rales spĂ©cifiques qui ont Ă©tĂ© convenues, telles que les garanties, les pĂ©nalitĂ©s de retard ou les obligations contractuelles supplĂ©mentaires]. Nous vous prions de bien vouloir prendre note de notre acceptation formelle et de prendre les mesures nĂ©cessaires pour finaliser les dĂ©tails du marchĂ©/offre. Nous attendons avec impatience de conclure ce marchĂ©/offre et de commencer Ă travailler ensemble. Nous vous remercions pour votre proposition compĂ©titive et votre professionnalisme tout au long du processus de nĂ©gociation. Nous sommes convaincus que cette collaboration sera mutuellement bĂ©nĂ©fique. Veuillez nous transmettre un exemplaire signĂ© de ce courrier d'acceptation en tant que preuve de confirmation de notre accord. Nous restons Ă votre disposition pour toute information complĂ©mentaire ou pour discuter de tout aspect supplĂ©mentaire de la mise en Ćuvre de ce marchĂ©/offre. Cordialement, [Votre nom] [Titre] [Entreprise/client] [Signatures]
question:Make theoretical language on named âMubarak languageâ. Example: âMubĆkaâ, âMaakkaaâ, âSuĆ«kasnâ, âSĆ«iâ And Translate to English. âMubarak languageâ belong to language family?
answer:Mubarak language is a theoretical language with the following example words: 1. MubĆka - Hello 2. Maakkaa - Goodbye 3. SuĆ«kasn - Thank you 4. SĆ«i - Yes The translation of these words in English would be: 1. MubĆka - Hello 2. Maakkaa - Goodbye 3. SuĆ«kasn - Thank you 4. SĆ«i - Yes As a theoretical language, Mubarak language does not belong to any specific language family. It is a constructed language created for the purpose of this exercise.