Erreur socket !

Bonjour,
J’ai créé un jeu de puissance 4 dans une applet en client/serveur. L’applet est lancé ave 3 paramètres:

  • Login du joueur
  • port du serveur
  • ip du serveur => à nul si c’est le serveur qui est lancé.

L’applet fonctionne très bien en local mais dès que je passe sur 2 postes cela ne fonctionne pas. J’ai l’erreur suivante :

[cpp]
java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.3.94:7777 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.(Unknown Source)
at java.net.Socket.(Unknown Source)
at Client.connexion(Client.java:76)
at Puissance4.init(Puissance4.java:103)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source) [/cpp]

j’ai déjà eu ce probleme mais y a longtemps
c’est une question de securité
(c’est du RMI ???)

non je n’utilise pas rmi, j’ai simplement une applet qui selon les paramètre envoyé lance un serveur et un client ou alors un seule client. J’utilise pr cela des socket. En lancant 2 applets en local cela marche mais dès que lance sur 2 machines le client n’arrive pas à se connecter au serveur pourant le serveur le lance bien avec son client.

J’ai trouvé ceci sur un site mais je sais pas comment cela fonctionne :

grant {
permission java.net.SocketPermission “:1024-65535",
“connect,accept,resolve,listen”;
permission java.net.SocketPermission "
:80”, “connect”;
};

Par défaut, une applet n’a le droit de se connecter qu’au serveur d’où elle est issue (Il doit également y avoir des restrictions sur le port)

Ces temps-ci, un grand nombre de virus se contente de faire du spamming en créant un serveur SMTP sur les postes infectés… Imagine s’il suffisait de passer sur une page web “mal intentionnée” pour avoir le même résultat?

Pour les mêmes raison de sécurité, une applet n’a pas non plus le droit de jouer les serveurs, n’a pas accès aux fichiers utilisateur, etc, etc

Si tu veux faire du client/serveur avec des applets, il faut que tu aies la maîtrise du serveur HTTP (ou de ce qu’il y a derrière), qui te sert de serveur de jeu, ou tout du moins de passerelle de communication entre les 2 applets (Chaque applet ouvre un socket vers le serveur d’où elle est issue, et c’est au serveur de faire “passer” les infos de l’une à l’autre)…

J’ai utilisé cette méthode dans le temps pour faire un puzzle bubble 2P, c’est un peu lourd à mettre en place, mais ça marche pas mal

myself, il est aussi possible d’Avoir accès aux fichiers et aux connexions en utilisant les certificats. Je ne suis pas très à l’aise avec ceux-ci mais il suffit de rechercher un peu sur le net pour savoir comment signer son applet.

je vais peut etre die une connerie mais tout simplement
Applet->Servlet->Applet non?

bye
all
omlip

D’où le “par défaut” :wink:

Pour faire un truc le plus générique possible avec les applets, il ne faut utiliser qu’un port, bcp de personnes sont derrière un firewall, et le port 80 est souvent le seul ouvert… Je ne sais pas comment un serveur normal gère une connexion “custom” qui arriverait en lieu et place d’une connexion HTTP standard


Ah… Et tous les problèmes de Timeout, et tout, et tout, …

Ca me paraît être un gros détournement de servlet… J’ai toujours associé les servlets à une idée de client léger… Ce que n’est pas vraiment une applet

Si quelqu’un s’y connait?

ouais faudrait que je revois mes cours moi parce que ça a du se fondre dans mon cerveau tous ces trucs la :??: :sarcastic:

enfin bonne chance pour tes sockets

a+
omlip

C’est peut-être moi qui suis à côté de la plaque, je pense ne pas être plus “frais” que toi, les cours sont loin :wink:

Un expert dans le coin? Paneb?

en fait on s’ecarte du sujet mais completement je pense,
Kara.ci==> je ne comprend qd tu dis je lance un client et le serveur par la meme applet??? je comprend pas tres bien?
logiquement tu a une applet qui est par exemple le client tu cree une socket, tu ouvre un flux reseau vers le serveur qui lui a aussi creer une SocketServeur et c’set ainsi que tu communique, enfin je crois.
Toi ce que tu veux c’est faire communiquer 2 applets c’est ca? je pense qu’une socket clietn ne communique que avec une socket serveur je pense!!

enfin dis nous quoi paske je crois que l’on est un peu perdu!!!:smiley:

allez a+
omlip

aya j’Avais pas vu :smiley:

ca ya est, on a resolu le probleme,
en fait, etant donnee que notre client serveur est une applet, il est impossible d’effectuer de la connexion socket sur deux pc differant si il n’y a pas d’authentification ( question de securite au niveau de l’applet),
il faut donc faire une authentification de l’applet en la signant avec une sorte de clef préalablement généré…
ensuite quand on lance l’applet, il est demande si on accepte d’ouvrir une connexion, il ne reste plus qu’a accepter pour que ca fonctionne
voila ++