[JAVA]Socket

Socket [JAVA] - Programmation

Marsh Posté le 04-04-2002 à 15:07:15    

J'ai une petite application Java avec un serveur et un client qui communiquent par sockets.
 
Lorsque je lance mon client et mon serveur sur la meme machine pas de probleme: la connexion se fait entre les deux et le programme suit son execution normale.
 
Par contre si je lance mon serveur et mon client sur deux machines différentes j'ai une exception au moment de la création du socket coté client:
 
socket= new Socket(adresse,port);
 
si kelk1 paut m'aider merci d'avance

Reply

Marsh Posté le 04-04-2002 à 15:07:15   

Reply

Marsh Posté le 04-04-2002 à 15:10:33    

oh ouais c'est surement que tu n'as pas appellé la méthode SetSecurityManager(JeDonnePasLaTraceDuProgrammeEtDoncPersonnePourraComprendre)
 
 :sarcastic:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 15:15:18    

de quelle classe ?

Reply

Marsh Posté le 04-04-2002 à 15:15:28    

kelle exception?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 04-04-2002 à 15:17:54    

ConnectException

Reply

Marsh Posté le 04-04-2002 à 15:18:23    

et le message d'erreur?
 
tu ne tenterais pas une connexion à Localhost par hasard  :sarcastic:

 

[jfdsdjhfuetppo]--Message édité par jupiler--[/jfdsdjhfuetppo]


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 04-04-2002 à 15:19:12    

ah oui , excuse:
Connexion refusée

Reply

Marsh Posté le 04-04-2002 à 15:19:39    

ton serveur n'écoute pas tiens.
 
Du coté server tu dois instancier un ServeurSocket(); et écouter les requetes via un s.accept(); où s est ton serversocket.
 
Si tu ne fais pas ca ton client va avoir du mal à se connecter. Il doit y avoir un truc qui change quand tu es passé sur une autre machine.
 
c'est quoi la valeur d'adresse et de port dans ton premier post?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 15:22:05    

nan c pas ça, je l'adresse à laquelle il essait de se connecter est bien celle de la machine ou tourne mon serveur avec le bon numéro de port

Reply

Marsh Posté le 04-04-2002 à 15:22:53    

question à 2 balles : tes 2 postes ont bien le protocole TCP/IP configuré, avec une adresse IP distincte
 
et est-ce que tu peux pinger d'un poste à l'autre ?

 

[jfdsdjhfuetppo]--Message édité par jupiler--[/jfdsdjhfuetppo]


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 04-04-2002 à 15:22:53   

Reply

Marsh Posté le 04-04-2002 à 15:24:47    

Voila mon serveur (le debut)
 
 
public Serveur(String path,int nuport)throws Exception
 {
 
  port=nuport;
 
  try {
  adresse=adresse.getLocalHost();
  }
  catch (UnknownHostException e) {
   System.out.println("machine pastrouvée" );
   System.exit(1);
         }
 
  adresseServeur=adresse.getHostAddress();
 
  serverSocket = new ServerSocket(port);

Reply

Marsh Posté le 04-04-2002 à 15:26:14    

Pour le ping entre les deux postes pas de problème les adresses sont bien différentes et nom d'hote aussi

Reply

Marsh Posté le 04-04-2002 à 15:27:53    

impossible de te répondre avec aussi peu de paramètres


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 15:27:58    

adresse=adresse.getLocalHost();  
 
adresseServeur=adresse.getHostAddress();  
 
 
ya déjà qqchose qui m'échappe. A quoi cela sert-il au serveur de connaitre sa propre adresse?
(a moins que tu ne veuille l'afficher pour connaitre l'IP local)
 
et de quel objet adresse s'agit-il?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 04-04-2002 à 15:29:25    

et où est ce qu'il écoute ton serveur là ???
 
edit : pardon, j'avais pas vu que c'était le constructeur ...

 

[jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 04-04-2002 à 15:32:19    

mon objet adresse:
 
private static InetAddress adresse;

Reply

Marsh Posté le 04-04-2002 à 15:34:52    

bon envoie la suite
 
et le client aussi!


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 04-04-2002 à 15:34:59    

redant a écrit a écrit :

mon objet adresse:
 
private static InetAddress adresse;  




et où est ce que tu l'initialises ?

Reply

Marsh Posté le 04-04-2002 à 15:41:46    

Voila la partie du client qui fait la connexion
 
public Session(String nomServeur,int port,String request, String identifiantSession)throws IOException
 {
 
  System.out.println("Essai de connexion avec:" +nomServeur);
 
  requete=request;
  id=identifiantSession;
 
  try {
   adresse=adresse.getByName(nomServeur);  //résolution d'adresse à partir du nom du serveur
   }
  catch (UnknownHostException e) {
   System.out.println("La machine n'a pas été trouvée" );
   System.exit(1);
          }
 
 
  socket= new Socket(adresse,port);  //Création d'un socket
  System.out.println("Creation d'une connexion avec: "+nomServeur +" avec port="+port);
 
 }// de constructeur Session
 
 
Erreur au niveau de la création du socket:
Connexion Refusée
 
 
 
J'ai vraiment l'impression que c'est un problème de sécurité

Reply

Marsh Posté le 04-04-2002 à 15:42:42    

Ben déjà, essaie de mettre un try {} catch autour de l'instanciation de ton ServerSocket...
Et si tu n'appelles jamais accept(), il n'écoute pas le port, le serveur!!
 
Ce que je te conseille :
 
public class Server IMPLEMENTS RUNNABLE {
 
...
 
public Serveur(String path,int nuport) throws Exception {
 
 port = nuport;
 public boolean alive = true;
 try {
     adresse=adresse.getLocalHost();
 }
 catch (UnknownHostException e) {
    System.out.println("machine pastrouvée" );
    System.exit(1);
 }
 
 adresseServeur=adresse.getHostAddress();
 
 serverSocket = new ServerSocket(port);
  Thread t = new Thread(this);
   t.start();
}
 
 
public void run() {
   Socket client;
   while (alive) {
      try {
        client = serverSocket.accept();
        System.out.println("J'ai un nouveau client, chouette alors!" );
      catch ( IOException ioe) {
      }
}
 
 
}
 
 
 
Ensuite, avec un simple telnet sur le bon port, ton serveur doit te dire qu'i la un client.

Reply

Marsh Posté le 04-04-2002 à 15:44:13    

Si la connection est refusée, c'est sans doute que :  
1 - le serveur n'écoute pas, vu ton code, je peux rien duire, à moins que tu n'aies tout mis, auquel cas je pense que c'est ça,
 
2 - y'a un firewall de brute entre tes 2 machines!! :D

Reply

Marsh Posté le 04-04-2002 à 15:48:39    

J'ecoute bien:
 
public void attendreConnexion()throws Exception
 {
  socket = serverSocket.accept();
  fromClient = new BufferedInputStream(socket.getInputStream());
 
 }

Reply

Marsh Posté le 04-04-2002 à 15:49:31    

j'ai toujours pas vu où adresse était initialisé ...

Reply

Marsh Posté le 04-04-2002 à 15:51:18    

Et tu as essayé d'écrire la trace de tes exceptions?? Ca pourrait aider!!
Pasque bon, ça a l'air a priori correct, ton serveur..  
 
Essaie un gros try {
}catch (Exception  e) {
e.printStackTrace(System.out);
}
 
autour de ton main, histoire de voir si il te répond pas des insultes intéressantes....

Reply

Marsh Posté le 04-04-2002 à 15:52:01    

9/10 que ton serveur se crashe et que tu ne t'en rends pas compte


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 15:52:35    

gfive a écrit a écrit :

Et tu as essayé d'écrire la trace de tes exceptions?? Ca pourrait aider!!
Pasque bon, ça a l'air a priori correct, ton serveur..  
 
Essaie un gros try {
}catch (Exception  e) {
e.printStackTrace(System.out);
}
 
autour de ton main, histoire de voir si il te répond pas des insultes intéressantes....  




un bon throws Exception sur le main suffit ! :sol:

Reply

Marsh Posté le 04-04-2002 à 16:00:30    

J'ai deja un throws Exception sur mon main
et pas d'erreur il a l'air en pleine forme...

Reply

Marsh Posté le 04-04-2002 à 16:05:18    

Bah, je te dis, après ton accept() (qui est bloquant) essaie de mettre une trace (system.out.println("Nouveauclient!" );)
 
et fait des telnet sur le port d'écoute (telnet machine port) depuis différents machines : si le telnet te répond 'connection refused" c'est que : soit le serveur écoute pas,
soit la connection ne s'ouvre pas : donc, par exemple, une config de FireWall qui empêche d'ouvrir un port en écoute, par exemple, c'est assez courant : genre, config de bas e du firewell des distribs Mandrake de Linux...

Reply

Marsh Posté le 04-04-2002 à 16:09:28    

démarre ton serveur uniquement et fais un telnet dessus pour voir si ca passe. Si ca passe ton client déconne. Sinon tu peux etre sur que ton serveur ou la liaison déconne (et ton client peut etre aussi ...)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 16:20:58    

Ca y est, j'ai compris.
 
C'etait vraiment une grosse connerie
J'ai completement oublié que je lancais mon serveur en telnet
du coup le client ne trouvait pas le serveur.
 
Je suis vraiment désolé :(

Reply

Marsh Posté le 04-04-2002 à 16:28:31    

Maintenant ça marche nickel mais je pense que je vais adopter la solution de gfive qui me paraît 10fois plus propre que la mienne
 
Est-il possible d'accepter plusieurs connexions à la fois en multithreading ?

Reply

Marsh Posté le 04-04-2002 à 16:32:01    

bin c'est un peu le but ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-04-2002 à 16:35:57    

redant a écrit a écrit :

Maintenant ça marche nickel mais je pense que je vais adopter la solution de gfive qui me paraît 10fois plus propre que la mienne
 
Est-il possible d'accepter plusieurs connexions à la fois en multithreading ?  




 
Ben oui...L'idée, c'est que tu récupères un objet Socket, que tu passes au constructeur d'une classe Runnable, qui gèrera les envois/réceptions sur ta socket...et donc, au prochain retour de accept(), ben tu as un autre client, etc....
 
Si tu veux voir un serveur qui marche comme ça :  
 
http://chat.orange.fr
 
version applet.

Reply

Marsh Posté le 04-04-2002 à 16:40:59    

ok, je vais essayer
 
merci à tous ceux qui m'ont aidé

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed