OVH Cloud OVH Cloud

socket TCP et problèmes triviaux pour débutant...

2 réponses
Avatar
Fonzarelli
Bonjour,

Voilà, depuis quelques jours, j'essaie de réaliser une application sous la
forme d'un applet java. J'utilise la machine java sun 1.5.0.
Je précise que je débute dans ce domaine. Et voilà que je tombe sur les
problèmes suivants :

1.
Mon applet doit communiquer avec son serveur. Ca fonctionne bien, mais la
connexion du socket est lente (~4.5 sec, avec lecture de l'horloge système
avant et après)
J'ai fouillé un moment, et j'ai la certitude que c'est la ligne suivante:

mySocket.connect(HostAddress, TimeOut);

mySocket est de la classe java.net.Socket

En mettant ça dans une application Java et non plus un applet, c'est
instantané...
Est-ce normal? Comment faire pour que cela s'exécute dans un temps "normal"
?

2.
L'applet communique donc avec son serveur. Je souhaiterais si possible faire
en sorte qu'un événement se déclenche lorsque des données sont reçues sur le
socket.
De la même manière qu'une fonction est automatiquement appelée lors de
l'appui sur le bouton correspondant.
Comment faire? merci de m'expliquer doucement les choses ;-)

3.
Si j'essaie de faire fonctionner mon applet dans Internet Explorer avec la
machine virtuelle Microsoft, j'ai juste un carré gris, et le message:
"class MyApplet not found" dans la barre d'état, et quelque chose de plus
long (mais pas plus parlant...) dans la console:

"
Error loading class: MyApplet
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException: MyApplet
at com/ms/vm/loader/URLClassLoader.loadClass
at com/ms/vm/loader/URLClassLoader.loadClass
at com/ms/applet/AppletPanel.securedClassLoad
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.run
at java/lang/Thread.run
"

Le code que j'ai inséré dans mon fichier HTML est le suivant:
"
<APPLET
ARCHIVE="TestJava.jar"
CODE="MyApplet.class"
ALIGN="center"
WIDTH="400" HEIGHT="300"
>
Message s'affichant si l'applet n'est pas supportée par le navigateur
</APPLET>
"

Qu'ai-je donc oublié?

4.
Est-il possible d'autoriser mon applet à manipuler des fichiers sur le PC
client?
Si possible sans devoir modifier la configuration de la machine,
c'est-à-dire sans modifier le fichier java.policy.

Voilà, ça fait beaucoup de questions, mais si quelqu'un peut me débloquer...

Merci d'avance !

2 réponses

Avatar
BJB
Bonjour,

1. Personne n'a jamis dit que l'initialisation d'un socket TCP est
rapide ;-) mais une fois initialisé, l'échange de donnée est plus
efficace et surtout 100% fiabilisé par le protocole TCP. Si tu as besoin
de quelque choise de plus rapide à l'initialisation, utilise UDP.

2. Oui, que tu utilises un datagrame (packet UDP) ou de l'envoie de
donnée dans ton flux TCP dans les deux cas tu peux récuper tes données
via un "stimulis"
Exemple pour UDP
http://www.cs.ucl.ac.uk/staff/S.Bhatti/teaching/z02/java-udp.html
Exemple pour TCP
http://www.cs.umd.edu/~shankar/417-F01/Slides/chapter2b-aus/sld017.htm

3. Oublit la VM de MS elle date vraiment trop. Elle date même d'une
époque où MS ne jurait plus que par Java avant de s'appercevoir qu'ils
étaient sur le point de se tirer une balle dans le pied en promouvant
une technologie étant hors de leur controle. Depuis tout est rentré
"dans l'ordre" ;-)

4. Oui tu peux, il faut alors certifier ton applet à l'aide d'un
certificat. Outre le fait que celà demande un peu de pratique, il faut
se demander si tu as vraiment besoin d'un tel accés. Car si c'est pour
stocker des données il existe d'autres solutions ;-)

A+
JB

Fonzarelli wrote:
Bonjour,

Voilà, depuis quelques jours, j'essaie de réaliser une application sous la
forme d'un applet java. J'utilise la machine java sun 1.5.0.
Je précise que je débute dans ce domaine. Et voilà que je tombe sur les
problèmes suivants :

1.
Mon applet doit communiquer avec son serveur. Ca fonctionne bien, mais la
connexion du socket est lente (~4.5 sec, avec lecture de l'horloge système
avant et après)
J'ai fouillé un moment, et j'ai la certitude que c'est la ligne suivante:

mySocket.connect(HostAddress, TimeOut);

mySocket est de la classe java.net.Socket

En mettant ça dans une application Java et non plus un applet, c'est
instantané...
Est-ce normal? Comment faire pour que cela s'exécute dans un temps "normal"
?

2.
L'applet communique donc avec son serveur. Je souhaiterais si possible faire
en sorte qu'un événement se déclenche lorsque des données sont reçues sur le
socket.
De la même manière qu'une fonction est automatiquement appelée lors de
l'appui sur le bouton correspondant.
Comment faire? merci de m'expliquer doucement les choses ;-)

3.
Si j'essaie de faire fonctionner mon applet dans Internet Explorer avec la
machine virtuelle Microsoft, j'ai juste un carré gris, et le message:
"class MyApplet not found" dans la barre d'état, et quelque chose de plus
long (mais pas plus parlant...) dans la console:

"
Error loading class: MyApplet
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException: MyApplet
at com/ms/vm/loader/URLClassLoader.loadClass
at com/ms/vm/loader/URLClassLoader.loadClass
at com/ms/applet/AppletPanel.securedClassLoad
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.run
at java/lang/Thread.run
"

Le code que j'ai inséré dans mon fichier HTML est le suivant:
"
<APPLET
ARCHIVE="TestJava.jar"
CODE="MyApplet.class"
ALIGN="center"
WIDTH="400" HEIGHT="300"

Message s'affichant si l'applet n'est pas supportée par le navigateur
</APPLET>
"

Qu'ai-je donc oublié?

4.
Est-il possible d'autoriser mon applet à manipuler des fichiers sur le PC
client?
Si possible sans devoir modifier la configuration de la machine,
c'est-à-dire sans modifier le fichier java.policy.

Voilà, ça fait beaucoup de questions, mais si quelqu'un peut me débloquer...

Merci d'avance !




Avatar
Francis JUGE-BOIRARD
Exemple pour UDP
http://www.cs.ucl.ac.uk/staff/S.Bhatti/teaching/z02/java-udp.html
Exemple pour TCP
http://www.cs.umd.edu/~shankar/417-F01/Slides/chapter2b-aus/sld017.htm
Source protéger par mot de passe c'est dommage....