Saturday, 01-Feb-2003 0:49

Laurent DEHOEY, I177416, 16392@n0rg.org

Solution au TP9...

http://n0rg.org/CNAM/CDI/TP9/


Fichiers Code Source Q1

  Name Size Date  
SimpleHttpd2.java 14351 24/01/2003  

La doc de Q1

Une sortie d'ecran

Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP9/Q1
$ java SimpleHttpd2&
[1] 1932

Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP9/Q1
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to TOSH-11K.
Escape character is '^]'.
GET / DaProtocolBlaBla
Request: GET / DaProtocolBlaBla
HTTP/1.0 200 OK
Server: SimpleHttpd2
Content-Type: text/html
Content-Length: 1102
....
....de index.html page
....
Connection closed by foreign host.

Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP9/Q1
$ kill %1

Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP9/Q1
$
[1]+  Terminated              java SimpleHttpd2

Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP9/Q1
$


Q2 proposition d'architecture de serveurs

Q2-1 : Pattern Stratégie : AbstractServer ClassicServer

La version des fichiers en 2.3 devra respecter toutes les specs...mais on est train de faire les choses
donc voici une permiere version des sources qui "tournent" tous avec les commandes de test en fin de TP
meme si on a pas de veritable certitude sur les choix de test et de gestion des erreurs du serveur

o exécution: > java -cp TestServeurs.jar SimpleWeb8111Client localhost
et
o exécution: java -cp .;TestServeurs.jar TestServeurs ou java -cp .;TestServeurs.jar TestServeurs http://localhost:8111/index.html http://localhost:8112/index.html

On met du random un peu partout pour générer des cas un peu limite :
interrupt pendant un accept / interrupt pendant des requetes en cours/
prise en comptes de connections existantes. Sleeping de thread serveur
avec des temps plus long et plus cours que le accept. des temps de
traitement des clients plus ou moins long que les sleeping des thread
serveurs...
Ici on fait "exceptionner" le serveur si on tente de clore des connections
en cours

Le protocol http ici n'est pas implémenté : le serveur repond sur le socket
ce qui le client lui à dit en rajoutant l'identité du thread servant la requete

A ce stade je ne gere pas encore le pattern stratégy du protocol....c'est
la question d'apres

Fichiers Code Source Q2-1

  Name Size Date  
HttpProtocol.java 7152 31/01/2003  
AbstractServer.java 11058 31/01/2003  
Protocol.java 313 31/01/2003  
Server.java 2531 31/01/2003  
ClassicServer.java 4190 31/01/2003  

La doc de Q2-1

C'est un peu difficile de présenter une sortie d'ecran avec deux serveur
et un client avec plusieurs thread qui attaquent ces deux serveurs jusqu'à
ce qu'on le fasse planter sciemment
Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP8 $ Admin@TOSH-11K /cygdrive/c/Documents and Settings/Admin/Mes documents/16392/CDI/TP8 $

 

 



Fichiers Code Source Q2-2

On a changé surtout dans ClassicServer.java toute la gestion du
retour vers le client par un seul appel : protocol.service(Socket client)
C'est plus clean
Il faut encore voir la gestion des erreurs, ca n'est pas fini : les plantages,
les temporistations les limitations du nombre de connections, les affichages
consoles sont à sérieusement revoir

  Name Size Date  
HttpProtocol.java 7131 31/01/2003  
AbstractServer.java 11084 31/01/2003  
Protocol.java 313 31/01/2003  
Server.java 2531 31/01/2003  
ClassicServer.java 4443 31/01/2003  
DaProcolarServars.jar 2531 31/01/2003  

La doc de Q2-2



Fichiers Code Source Q2-3

En fait de la maniere dont on a procédé on a tout
depuis la question 2.2 Alors ici on va juste mettre
le jar et eventuellment plus tard des batteries de test
pour le fun de voir stresser notre serveur
Mais le DaProcolarServars.jar de la Q2.2 est plus
marrant à tester du coté client (on lui cause !)

  Name Size Date  
DaProcolarServars.jar 7131 31/01/2003  

"Most programs contain a multitude of methods, spread across a large number of classes. Of course, it's difficult, if not impossible, to test all of these methods from just the main entry point of a program.

That's why unit tests are useful. Many programmers and software designers (including myself) stress the usefulness of unit tests in writing robust software. But a potential tradeoff occurs if you want to be able to access the various elements of your program in a more interactive manner.

When this is the case, it can quickly become cumbersome to write, compile, and run new unit tests for each result. I find this especially true when I don't know in advance how my program will behave given certain inputs (as can be the case in an AI program, for instance).

So, what to do?"

http://www-106.ibm.com/developerworks/java/library/j-diag0312/


En fait j'ai eu du mal à interpréter ce que devait faire interrupt() :
Il me semble que ce qui était demandé finalement était de faire
une sorte de temporisation du serveur avec un sleep et ensuite
de le reveiller avec un interrupt ? Mais qui peut faire cet interrupt
du serveur lui meme ? un thread généré par le serveur ?
(j'ai trouvé cette référence trop tard dans "programmation réseau
avec java" de E.R.Harold chez O'Reilly p137 de la deuxieme edition
en francais) Décidemment je n'arrive pas à me décider... aussi
ai-je essayé de faire planter le serveur en pleine requete client
de manière aléatoire alors que j'ai tout pour eviter ca...
(connections,etc,..)

on aurait pu monter une petite applet avec un bouton d'interruption
du serveur pendant un laps de temps entré dans un champ de texte

Pour mon projet "routage dans les réseaux adhoc" je pense que
ces deux TP sur les threads vont peut-etre me servir : chaque
mobileun thread, avec ses propres paquets à envoyer/recevoir,
les paquets à router pour le compte de ses voisin, un thread
collecteur de statistiques, un thread collecteur de positions/vitesses
(la fonction GPS)...
ca peut etre marrant ! :-)

 

This page was semi-automatically generated by SharpDevelop and a brain