OVH Cloud OVH Cloud

BufferedWriter : probleme d'ecriture

19 réponses
Avatar
Danious
Bonjour,
ayant recemment cree un jeu du serpent que j'ai mis en ligne a
l'adresse http://perso.wanadoo.fr/danious/serpent.html , j'ai voulu
mettre en place un systeme qui permet a tout joueur qui fait une partie
d'enregistrer son score apres avoir entre son nom lorsque le jeu est
fini. J'utilise pour cela les instructions (classiques) suivantes :

File scores=new File("scores.html");
FileWriter out=new FileWriter(scores,true);/*true : pour ecrire a la
fin*/
BufferedWriter b=new BufferedWriter(out);
String s=getNomEtScore();/*cette fonction permet d'octenir la chaine
a ecrire dans le fichier html*/
b.write(s+" <br> "); /*br : pour une nouvelle ligne dans le fichier
html*/
b.newLine();/*pas obligatoire*/
b.flush();/*vide le tampon*/
b.close();

IMPORTANT : ces instructions marchent parfaitement chez moi
mais quand je mets ce code en ligne (avec un fichier scores.html vide
dans le meme dossier que les classes de mon jeu du serpent) et que je
fais une partie en ligne, rien n'est ajoute au fichier scores.html du
site alors que les instructions sont les memes que celles qui marchent
dans mon dossier en local...
Apparemment c'est parce qu'il n'arrive pas a trouver le fichier
scores.html qui, pourtant, est bien place dans le meme dossier que les
classes. (ca ne marche pas non plus en ligne avec ./scores.html alors
que ca marche en local)

Je ne comprends vraiment pas ce qui cloche.

merci d'avance pour vos solutions

Danious

9 réponses

1 2
Avatar
Shorty
Je ne vois pas du tout ce que tu comptes faire avec une méthode put
sans avoir d'application (même légère en php) côté serveur. Et si
on a une application côté serveur, pourquoi ne pas juste lui
transmettre le score et lui laisser la tâche de le rajouter à la
liste des scores sur le serveur ?
Avatar
Thomas Labourdette
Shorty a écrit le Mardi 14 Juin 2005 13:38 :

Je ne vois pas du tout ce que tu comptes faire avec une méthode put
sans avoir d'application (même légère en php) côté serveur.


Il y a une application côté serveur, c'est ... le serveur web. Et 'PUT' fait
partie du protocole HTTP.

@+
--
Amar LARGUÉE-GRANVOIHISSÉE (signature aléatoire)
Sur mon bulletin scolaire :
"Fait des efforts désespérés...pour se rapprocher de la fenêtre."

Avatar
Shorty
Oui, et s'il est sous windows, il a aussi un notepad comme application,
ça ne nous aide pas beaucoup...

Par application sur le serveur, j'entends une application capable
d'interpréter la requête PUT et d'en faire quelque chose (par exemple
enregistrer le fichier soumis quelque part sur le serveur). Si c'est
juste une page HTML statique à laquelle on accède avec un PUT, on
n'est pas plus avancé.

Le fait que PUT soit dans le protocole HTML n'impose pas que le serveur
Web sache quoi en faire quand il la reçoit, donc ça ne nous avance
pas plus.

Si on a un serveur Web qui ne sait que présenter des pages statiques
selon l'URI demandée, il peut très bien respecter HTTP et accepter le
PUT, mais n'enregistrera jamais les scores côté serveur.

D'un autre côté, si on a aussi un serveur applicatif derrière, ou
juste un module permettant d'exécuter du script sur le serveur (que ce
doit du java, du cgi-bin, du php...) il pourra interpréter la requête
PUT et faire l'enregistrement de score qui va bien.

Mais si on sait faire tout ça, à quoi cela sert-il de télécharger
d'abord l'ancienne liste de score du serveur et de resoumettre une
nouvelle liste de score au serveur par PUT (ce qui est très mauvais du
point de vu accès concurrents d'ailleurs) ?

On peut juste envoyer le score au serveur par HTTP (en PUT ou GET ou
n'importe quoi d'autre, c'est pas ça qui est important, c'est juste le
format de soumission de la requête, c'est pas ça qui va t'enregistrer
un fichier...) et faire en sorte que le code 'intelligent' sur le
serveur se charge de compiler la nouvelle liste de scores en plus de
faire l'enregistrement.

bye
Avatar
Thomas Labourdette
Shorty a écrit le Mardi 14 Juin 2005 16:27 :

Oui, et s'il est sous windows, il a aussi un notepad comme application,
ça ne nous aide pas beaucoup...


C'est parler pour ne rien dire

Par application sur le serveur, j'entends une application capable
d'interpréter la requête PUT et d'en faire quelque chose (par exemple
enregistrer le fichier soumis quelque part sur le serveur).


Si le serveur ne sait pas quoi faire d'une requête PUT, il faut changer de
serveur (ne pas confondre avec une requête post).



Si on a un serveur Web qui ne sait que présenter des pages statiques
selon l'URI demandée, il peut très bien respecter HTTP et accepter le
PUT, mais n'enregistrera jamais les scores côté serveur.


Dans ce cas, il y a un bug.

Mais si on sait faire tout ça, à quoi cela sert-il de télécharger
d'abord l'ancienne liste de score du serveur et de resoumettre une
nouvelle liste de score au serveur par PUT (ce qui est très mauvais du
point de vu accès concurrents d'ailleurs) ?

Pour ce qui est du problème de l'accès concurrentiel, il reste la

possibilité de se servir du protocole WebDav.

Maintenant je suis d'accord avec toi que ce n'est pas la meilleure solution,
mais d'un autre côté mettre en place une base de données + un midleware,
juste pour récupérer les scores de 3 pelés et un tondu tous ça hébergé sur
un compte perso chez Wanadoo, ça va pas être facile.

@+
--
Davy CONTRAIRE (signature aléatoire)
Inscriptions relevées sur divers produits de grande consommation :
Sur un somnifère Nytol : "Attention, la prise de ce médicament peut
entraîner un état de somnolence"

Avatar
Shorty
Oui effectivement, je me suis laché un peu vite.

Bon en gros le truc c'est que le PUT va faire n'importe quoi dès que
deux personnes l'utilisent (je ne pense pas que ce soit fait pour ce
genre de trucs).

D'un autre côté, on n'est pas forcément obligé d'utiliser une base
de données et un middleware lourd pour gérer le score de manière à
peu près propre.
Je ne sais pas trop comment ça se passe chez les hébergeurs grand
public, mais j'imagine qu'on peut utiliser du php quand même ? dites
moi si je me trompe.
Et si c'est le cas, gérer les scores de manière propre en php doit
être assez faisable (beaucoup mieux qu'en PUT de toute façon)
Avatar
Danious
en fait (je sais c'est vraiment nul mais) wanadoo ne me permet
apparemment pas d'utiliser du php... (ni une base de donnees puisque ca
se gere a travers du php) la preuve, c'est qu'il faut payer 9&#8364;
par mois pour avoir le php et sql.

Je crois que je vais essayer la classe URLConnection, mais j'espere que
ce sera assez securise pour que personne ne puisse tout pirater...
Avatar
Shorty
Oui effectivement, c'est très nul :-(

Ce qui est embêtant surtout, c'est qu'à mon avis, si ton applet peut
faire écrire un fichier dans ton espace Wanadoo, n'importe qui pourra,
vu que ça sera géré par le serveur web de wanadoo et pas par toi
(que ça soit à travers une configuration de ton espace ou un
programme).

Ton applet ne fera qu'utiliser le protocole HTTP comme n'importe qui
d'autre peut le faire et il n'y aura aucun contrôle sur l'origine du
fichier (enfin du moins, je ne vois pas comment ça peut être fait si
wanadoo ne te laisse rien faire d'autre que des pages statiques)
Avatar
damien guerin
Fais toi héberger par quelqu'un d'autre... Y en a des tas !
Avatar
Shorty
Pour l'accès par tous, ce que je veux dire, c'est qu'à partir du
moment où l'appel peut gérer comme elle l'entend un fichier sur le
serveur, on ne peut pas trop blinder le mécanisme pour faire en sorte
que seule l'applet y accède...

Au moins, avec une application serveur qui gèrent elle même
l'écriture, on peut restreindre l'écriture à des scores dans ce
fichier et empêcher qu'on casse tout à côté.
1 2