[JAVA][RESEAU]Problèmes sockets TCP/IP

Problèmes sockets TCP/IP [JAVA][RESEAU] - Java - Programmation

Marsh Posté le 02-06-2003 à 09:57:04    

Salut à tous :)
 
Voilà le programme suivant ne fonctionne pas :

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. class TCPClient
  4. {
  5.     public static void main(String argv[])
  6.     {
  7.      int choix;
  8.      InetAddress adresse;
  9.      Socket clientSocket;
  10.      BufferedReader in = new BufferedReader ( new InputStreamReader (System.in));
  11.      try
  12.      {
  13.       try
  14.       {
  15.        adresse = InetAddress.getByName("192.168.1.99" );
  16.   clientSocket = new Socket(adresse, 10001);
  17.   if (clientSocket.isConnected()){System.out.println("Connection OK" );}
  18.   DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  19.        System.out.println("Votre choix :" );
  20.        System.out.println("-1- Entrer la trame" );
  21.        System.out.println("-0- Sortir\n" );
  22.        choix=Integer.parseInt(in.readLine());
  23.        while (choix != 0)
  24.        {
  25.    char c=2;
  26.           String t=c+"DIq";
  27.            outToServer.writeBytes(t);
  28.            System.out.println("Votre choix :" );
  29.         System.out.println("-1- Entrer la trame" );
  30.         System.out.println("-0- Sortir\n" );
  31.         choix=Integer.parseInt(in.readLine());
  32.           }
  33.           clientSocket.close();
  34.           outToServer=null;
  35.           clientSocket=null;
  36.           receptionSocket.close();
  37.          }
  38.       catch (UnknownHostException z){System.out.println(z.getMessage());}
  39.      }
  40.      catch (IOException e){System.out.println(e.getMessage());}
  41.     }//fin main
  42. }//fin classe


 
En réalité, les données ne sont pas correctement envoyées à travers le socket...
Si je ferme le socket immédiatement après l'envoi, les données sont correctement envoyées !
 
Des idées ?
 

Reply

Marsh Posté le 02-06-2003 à 09:57:04   

Reply

Marsh Posté le 02-06-2003 à 10:04:02    

il faut fermet ton outToServer avant le socket. Petit rappel, si tu crées des objets en chaine tu dois les détruires en ordre inverse


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

Marsh Posté le 02-06-2003 à 10:07:39    

Je ne comprend pas...Fermer outToServer ? Fermer un socket je veux bien mais là je vois pas ...

Reply

Marsh Posté le 02-06-2003 à 10:08:33    

J'y connais pas grand chose mais je rajouterais des outToServer.flush() pour forcer l'envoi des données.

Reply

Marsh Posté le 02-06-2003 à 10:09:43    

nicky78 a écrit :

J'y connais pas grand chose mais je rajouterais des outToServer.flush() pour forcer l'envoi des données.


 
J'ai déjà tenté le coup avec le flush(), ça n'a rien donné  ;)

Reply

Marsh Posté le 02-06-2003 à 10:17:24    

Mouaiffe a écrit :

Je ne comprend pas...Fermer outToServer ? Fermer un socket je veux bien mais là je vois pas ...


 
bin regarde dans l'api alors. C'est la PREMIERE chose à faire [:ban]
 
http://java.sun.com/j2se/1.4.1/doc [...] tream.html
 
Il y a une méthode close() sur cet objet. Toi tu le laisses ouvert comme ca dans un état incohérent (le mettre à null ne vas pas fermer le flux proprement)
 
-> tu fais un close sur ton outToServer (outToServer.close(); ) et ensuite tu fais close sur ta socket.


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

Marsh Posté le 02-06-2003 à 10:30:12    

Ok, j'avais pas vu...
 
Je tente le coup...

Reply

Marsh Posté le 02-06-2003 à 10:42:07    

DarkLord a écrit :


 
bin regarde dans l'api alors. C'est la PREMIERE chose à faire [:ban]
 
http://java.sun.com/j2se/1.4.1/doc [...] tream.html
 
Il y a une méthode close() sur cet objet. Toi tu le laisses ouvert comme ca dans un état incohérent (le mettre à null ne vas pas fermer le flux proprement)
 
-> tu fais un close sur ton outToServer (outToServer.close(); ) et ensuite tu fais close sur ta socket.


 
Ca à l'air de fermer la socket également !

Reply

Marsh Posté le 02-06-2003 à 10:42:44    

Mouaiffe a écrit :


 
Ca à l'air de fermer la socket également !  


 
comment ca a l'air de ... Tu peux pas t'exprimer clairement stp?


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

Marsh Posté le 02-06-2003 à 10:49:32    

Pardon...
 
je que je veux dire c'est qu'en fermant mon DataOutputStream je ferme aussi la socket...La syntaxe est correcte pour toi ?
 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. class TCPClient
  4. {
  5.     public static void main(String argv[])
  6.     {
  7.      int choix;
  8.      InetAddress adresse;
  9.      Socket clientSocket;
  10.      String recu="";
  11.      BufferedReader in = new BufferedReader ( new InputStreamReader (System.in));
  12.      try
  13.      {
  14.       try
  15.       {
  16.        adresse = InetAddress.getByName("192.168.1.99" );
  17.   clientSocket = new Socket(adresse, 10001);
  18.   if (clientSocket.isConnected()){System.out.println("Connection OK" );}
  19.        System.out.println("Votre choix :" );
  20.        System.out.println("-1- Entrer la trame" );
  21.        System.out.println("-0- Sortir\n" );
  22.        choix=Integer.parseInt(in.readLine());
  23.        while (choix != 0)
  24.        {
  25.    char c=2;
  26.           String t=c+"DIq";
  27.           DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  28.            outToServer.writeBytes(t);
  29.            outToServer.close();
  30.            outToServer=null;
  31.            System.out.println("Votre choix :" );
  32.         System.out.println("-1- Entrer la trame" );
  33.         System.out.println("-0- Sortir\n" );
  34.         choix=Integer.parseInt(in.readLine());
  35.           }
  36.           clientSocket.close();
  37.           clientSocket=null;
  38.          }
  39.       catch (UnknownHostException z){System.out.println("Erreur 1 : "+z.getMessage());}
  40.      }
  41.      catch (IOException e){System.out.println("Erreur 2 : "+e.getMessage());}
  42.     }// fin main
  43. }//fin classe

Reply

Marsh Posté le 02-06-2003 à 10:49:32   

Reply

Marsh Posté le 02-06-2003 à 10:59:07    

bin non :D
 
tu dois fermer ton outToServer qd tu as terminé de bosser avec ta socket hein :)
 
Donc il faut garder le meme dataoutputtream selon moi
 
Et sinon ca ferme la socket puisque tu crées le stream a partir de socket.getOutputstream) -> qd tu close tu close le out de ta socket


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

Sujets relatifs:

Leave a Replay

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