Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1532 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Socket UDP et InputStream, probleme de read

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Socket UDP et InputStream, probleme de read

n°380309
HelloWorld
Salut tout le monde!
Posté le 02-05-2003 à 12:15:29  profilanswer
 

Salut,
quelqu'un peut-il me dire pourquoi ce code marche :

Code :
  1. InputStream input = socket.getInputStream();
  2. for ( int i = 0; i < data.length; ++i )
  3. {
  4.     data[ i ] = input.read();
  5. }


et celui-ci non (le read reste bloqué) :

Code :
  1. InputStream input = socket.getInputStream();
  2. input.read( data );
  3. // ou bien input.read( data, 0, data.length );


C'est censé lire exactement la meme quantite de byte émis. Sauf que ca reste bloqué au read. Meme un flush ou un close apres l'émission  sur le OutputStream ne change rien.
Une idée ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 02-05-2003 à 12:15:29  profilanswer
 

n°380679
HelloWorld
Salut tout le monde!
Posté le 02-05-2003 à 18:02:12  profilanswer
 

:cry:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°380804
darklord
You're welcome
Posté le 02-05-2003 à 20:08:48  profilanswer
 

que vaut data?


---------------
Just because you feel good does not make you right
n°382369
artemice
( - ;
Posté le 05-05-2003 à 10:22:11  profilanswer
 

tien ça ça marche au moin... et c propre!

Citation :

  /**
   * class recepteur réseau du chat udp
 * @author TROLAT_REYNIER_2a_isi_2j
 */
   
   import java.io.*;
   import java.net.*;
   import fr.iutvalence.isi2.chat.*;
 
 
    class ChatReceiver extends Thread  
   {
   
      public static String IP;
      public ChatGUI gui;
      public static String PORT;
      public  String pseudo;
   
   
   /*le constructeur*/
       public ChatReceiver(String pseu,ChatGUI g,String ip,String port)
       
      {
         super();
         IP=ip;
         PORT=port;
         gui=g;
         pseudo=pseu;
       
      }
   
   /*le corps du thread
   * suivant le principe décrit en cours
   */
       public void run()
      {
         InetAddress group=null;
       
         try
         {
            group=InetAddress.getByName(IP);
         }
             catch(UnknownHostException e)
            {
               System.out.println("pb host" );  ;
            }
       
         MulticastSocket ms=null;
       
         try
         {
            ms=new MulticastSocket(Integer.parseInt(PORT));
         }
             catch(IOException e)
            {
               System.out.println("pb io" );  
            }
       
       
         try
         {
            ms.joinGroup(group);
         }
             catch(IOException e)
            {
               ;
            }
             
         DatagramPacket p=new DatagramPacket(new byte[100],100);
         gui.display("************ bonjour vous étes sur LE chat **************\n" );
         while(true)
         {
         /*on reçoit le message*/
            try
            {
               ms.receive(p);
            }
                catch(IOException e)
               {
                  ;
               }
            String s="";
             
         /*on le récupère est on le format*/
            try
            {
               s=new String(p.getData(),"UTF-16" );
               s=s.substring(0,p.getLength()/2-1);
            }
                catch(UnsupportedEncodingException e)
               {
                  ;
               }
           
          /*on l'affiche*/
           
            gui.display("reçu : "+s+"\n" );
         
         
            try
            {
               Thread.sleep(2000) ;
            }
                catch(InterruptedException e)
               {
                  ;
               }
         }
      }
   }

n°382371
artemice
( - ;
Posté le 05-05-2003 à 10:23:29  profilanswer
 

ici c du multicast mais c encore moin compliqué en unicast!

n°398456
HelloWorld
Salut tout le monde!
Posté le 18-05-2003 à 15:46:05  profilanswer
 

Désolé pour le retard.
Il s'agissait d'un projet, qui est rendu maintenant. Mais j'aimerais bien comprendre.
Pour échanger des chaines de caracteres ca marche tres bien.
Mais pour envoyer un gros paquet de données (data est un byte [], qui vaut plusieurs centaines de Ko, voire plusieurs Mo) ca fouarre.
Voila une partie de la classe TCPConnexion, qui est utilisée par le serveur et le client pour les échanges.
Ca merdouille au niveau de ReceiveBytes( byte [] Data ) (a la fin)

Code :
  1. public class tcpConnexion
  2. {
  3.     // serveur
  4.     tcpConnexion( int Port )
  5.     {
  6.      try
  7.      {
  8.             TcpSrvSocket = new ServerSocket( Port );
  9.             IsServer = true;
  10.             IsConnected = false;
  11.         }
  12.         catch ( BindException e )
  13.         {
  14.          System.err.println( "Erreur : le port " + Port + " est déjà utilisé." );
  15.          System.exit( -1 );
  16.         }
  17.         catch ( IOException e )
  18.         {
  19.          System.err.println( e );
  20.          System.exit( -1 );
  21.     }
  22.     }
  23.     // client
  24.     tcpConnexion( String Host, int Port )
  25.     {
  26.      try
  27.         {
  28.          IsServer = false;
  29.          TcpSocket = new Socket( Host, Port );
  30.          IsConnected = true;
  31.       TcpInput = new BufferedReader( new InputStreamReader( TcpSocket.getInputStream() ) );
  32.       TcpOutput = new PrintWriter( TcpSocket.getOutputStream(), true );
  33.      }
  34.      catch ( UnknownHostException e )
  35.         {
  36.          System.err.println( "Erreur : serveur " + Host + " introuvable." );
  37.          System.exit( -1 );
  38.     }
  39.     catch ( ConnectException e )
  40.     {
  41.          System.err.println( "Erreur : la connexion a échoué sur " + Host + ":" + Port );
  42.          System.exit( -1 );
  43.     }
  44.         catch ( IOException e )
  45.         {
  46.          System.err.println( e );
  47.          System.exit( -1 );
  48.     }
  49.     }
  50.     void Close()
  51.     {
  52.      try
  53.      {
  54.       // pour le serveur, le 1° appel met fin à l'accep précédent
  55.             if ( IsConnected )
  56.             {
  57.              TcpInput.close();
  58.              TcpOutput.close();
  59.              TcpSocket.close();
  60.             }
  61.             // le 2° appel consécutif met fin au serveur
  62.             else if ( IsServer )
  63.             {
  64.              TcpSrvSocket.close();
  65.             }
  66.         }
  67.         catch ( IOException e )
  68.         {
  69.          System.err.println( e );
  70.     }
  71.     }
  72.     // serveur : accepter une connexion
  73.     void Accept()
  74.     {
  75.      if ( IsServer && !IsConnected )
  76.      {
  77.       try
  78.       {
  79.                 TcpSocket = TcpSrvSocket.accept();
  80.           TcpInput = new BufferedReader( new InputStreamReader( TcpSocket.getInputStream() ) );
  81.           TcpOutput = new PrintWriter( TcpSocket.getOutputStream(), true );
  82.           IsConnected = true;
  83.             }
  84.             catch ( IOException e )
  85.             {
  86.              System.err.println( e );
  87.              System.exit( -1 );
  88.          }
  89.      }
  90.     }
  91.     // envoyer un tableau de byte
  92.     boolean SendBytes( byte [] Data )
  93.     {
  94.         if ( IsConnected )
  95.         {
  96.             try
  97.             {
  98.                 OutputStream output = TcpSocket.getOutputStream();
  99.                 output.write( Data );
  100.                 return true;
  101.             }
  102.             catch ( IOException e )
  103.             {
  104.              return false;
  105.          }
  106.         }
  107.         return false;
  108.     }
  109.     // recevoir un tableau de byte
  110.     boolean ReceiveBytes( byte [] Data )
  111.     {
  112.         if ( IsConnected )
  113.         {
  114.          try
  115.          {
  116.              InputStream input = TcpSocket.getInputStream();
  117.                 //ne marche pas ... ???
  118.                 //input.read( Data, 0, Data.length );
  119.                 for ( int i = 0; i < Data.length; ++i )
  120.                 {
  121.                     Data[ i ] = (byte)input.read();
  122.                 }
  123.                 return true;
  124.             }
  125.             catch ( IOException e )
  126.             {
  127.              return false;
  128.          }
  129.         }
  130.         return false;
  131.     }
  132.     // données privées
  133.     private ServerSocket TcpSrvSocket = null;  // socket serveur
  134.     private Socket TcpSocket = null;           // socket client
  135.     private BufferedReader TcpInput = null;
  136.     private PrintWriter TcpOutput = null;
  137.     private boolean IsServer;                  // vrai si on est un serveur
  138.     private boolean IsConnected;               // vrai si on est connecté
  139.                                                // (à un serveur ou un client)
  140. }


Message édité par HelloWorld le 18-05-2003 à 15:48:00

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Socket UDP et InputStream, probleme de read

 

Sujets relatifs
Java : Envoyer un mail protocole mapi[PHP-MYSQL] J'ai un problème que je n'arrive pas à résoudre SVP
[JAVA] L'équivalent d'un #define en java ?Gros problème de transfert de BDD MySQL !
[C/C++] Sockets en UDP, problème d'envoi à une IP[PHP]Probleme d'execution de script avec Easy Php
probleme avec une boucle[ Python ] problème libftp [ resolu ]
[C] Probleme d'édition de lien 
Plus de sujets relatifs à : [JAVA] Socket UDP et InputStream, probleme de read


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR