Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur sur read et readLine sur un Socket [ Divers / Débutant(e) ] (Nitruk)

mercredi 30 juillet 2008 à 15:52:30 | Erreur sur read et readLine sur un Socket

Nitruk

Bonjour, j'essaye actuellement de bricoler en Java (je débute) les sockets et la connection inter-programmes, pour le plaisir. Seulement si j'arrive à faire de connecter un serveur et un ou plusieurs clients, je n'arrive pas à faire passer d'informations entre eux.
Je suis donc revenu à un code ultra simplifié côté serveur comme côté client pour voir d'où venait le problème. Ici je me contente donc d'établir la connection puis d'envoyer un caractère o`|u une chaîne de caractères côté client, et de le réceptinoner avec read ou readLine (y compris la version de read qui utilise un tableau de caractères) côté serveur, en attendant réception une fois la connection établie côté serveur. Je me suis ainsi aperçu que c'était la fonction de lecture qui renvoyait une exception sur le serveur, et ce même si le client n'envoyait rien de son côté. Simplement une fois la connectino établie, quand le serveur passe à l'instruction read ou readLine, il sort une exception. Voici mon cide pour observation, je vous serais reconnaissant si vous pouviez m'apporter quelque lumière sur la question.
(Pour info j'ai essayé sur les ports 1800 et 18000, et ce qui est  en commentaire dans le code du serveur est la boucle que j'avais prévue à l'origine avant de simplifier encore le code.)

Serveur :

import java.net.*;
import java.io.*;
import java.util.*;

public class serveur
{
public static void main(String args[])
  {
  try
    {
    ServerSocket ss = new ServerSocket(1800);
    while (true)
      {
      Socket _s = ss.accept();
      System.out.println("Un client se connecte.");
      BufferedReader _in = new BufferedReader(new InputStreamReader(_s.getInputStream()));
      char[] message = new char[10];
      _in.read(message);
    /*while ((message = _in.read())!= 100)  (A ce moment, message était de type char)
        {
         System.out.println("un message passe");
         System.out.write(message);
         }      */
      }
    }
  catch (Exception e)
    {
    System.out.println("Une erreur est survenue.");
    }
  }
}

Client :

import java.net.*;
import java.io.*;
import java.util.*;

public class client
  {
  public static void main(String[] argv)
    {
    BlablaClient client = new BlablaClient();
    try
      {
      Socket _s = new Socket("localhost", 1800);
      PrintWriter _out = new PrintWriter (new OutputStreamWriter(_s.getOutputStream()));
      System.out.println("un message est envoye");
      _out.print("Ceci est un message du client.");
      }
    catch (Exception e)
      {
      System.out.println("Une erreur est survenue.");
      }
    }
  }

Nitruk

mercredi 30 juillet 2008 à 16:24:33 | Re : Erreur sur read et readLine sur un Socket

Kysic

Membre Club
Salut,
personnellement j'utilise :

Réception message :
            br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
            String rep = br.readLine();

Envoi message :
            ps = new PrintStream(soc.getOutputStream());
            ps.println("Essai");

Cordialement

mercredi 30 juillet 2008 à 17:01:22 | Re : Erreur sur read et readLine sur un Socket

Nitruk

Merci d'avoir répondu si vite :)
Comme je le disais plsu haut, j'ai essayé avec read et readLine, et côté client avec write et println.
En tout ca sc'est du côté de la réception que ça bloque, même si le client n'evoie rien (je le fais quand même se connecter pour avoir un socket duquel tenter une réception).

Nitruk

mercredi 30 juillet 2008 à 17:11:27 | Re : Erreur sur read et readLine sur un Socket

Kysic

Membre Club
Pourrais tu nous donner l'exception générée stp.

mercredi 30 juillet 2008 à 17:16:27 | Re : Erreur sur read et readLine sur un Socket

Kysic

Membre Club
A mon avis le problème est ton "_out.print("Ceci est un message du client.");" et si tu as une exception quand tu n'écris rien s'est normal, c'est que le client ferme la socket, donc le serveur n'a plus rien à attendre de lire dessus.

mercredi 30 juillet 2008 à 17:23:52 | Re : Erreur sur read et readLine sur un Socket

Nitruk

Comme je vous le disais je suis débutant, et je ne maîtrise pas trop les exceptions, et encore moins celles qui concernent les Sockets et les lectures et écritures. Je vais me renseigner sur le sujet. Et effectivement je devrais avoir println, mais je ne pense pas que ce soit ça puisque comme je le disais j'ai essayé avec plusieurs foncitons d'écriture, avec des chaînes ou des caractères, donc ce print n'a pas toujours été là.Enfin je vais essayer ça, et aussi de maintenir le client connecté sans envoyer de message.

Nitruk

mercredi 30 juillet 2008 à 17:28:48 | Re : Erreur sur read et readLine sur un Socket

Kysic

Membre Club
En fait pour connaître l'exception générée il suffit de rajouter un "e.printStackTrace()" dans tes blocs "catch (Exception e)".

mercredi 30 juillet 2008 à 17:37:30 | Re : Erreur sur read et readLine sur un Socket

Nitruk

Bon, j'ai essayé en changeant print par println, sans observer de changement. Par contre, quand j'ai collé une boucle infinie avant l'expédition du message côté client, il n'y a plus eu d'exception déclenchée chez le serveur, ce qui prouve que vous aviez raison (A savoir :  c'est la fermeture du socket par le client qui cause l'erreur si aucun message n'est envoyé, et donc dans le cas contraire c'est bien àa la réception du message qu'il y a erreur. Je vais chercher le détail des exceptions.

Nitruk

mercredi 30 juillet 2008 à 17:40:41 | Re : Erreur sur read et readLine sur un Socket

Nitruk

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.read1(BufferedReader.java:187)
        at java.io.BufferedReader.read(BufferedReader.java:261)
        at java.io.Reader.read(Reader.java:123)
        at serveur.main(serveur.java:16)

Donc une remise à 0 de la connection, apparement. Personnellement je ne m'y connais aps assez pour que ça puisse m'éclairer sur ce qui arrive et ce que je dois changer.

Nitruk

mercredi 30 juillet 2008 à 17:43:21 | Re : Erreur sur read et readLine sur un Socket

Nitruk

J'ai essayé en collant la boucle infinie après l'envoi du message, pour voir. Et là j'ai pu constater que l'erreur n'aparaissait pas avant que je ferme le client. Il semble donc que le serveur ne trouve pas la fin du message et continue à attendre jusqu'à ce que la connexion soit fermée. Pourtant j'ai bien println et readLine...

Nitruk


1 2

Cette discussion est classé dans : message, serveur, client, out, read


Répondre à ce message

Sujets en rapport avec ce message

Read/Write sur un Socket [ par livier_silha ] Supposons un client/serveur tout simple: . le serveur étant basique, du genre:     ServerSocket server = new ServerSocket(10101);     Socket socket = JAVA CLIENT/SERVEUR FTP [ par nicordi ] BonjourJe vous envoi un mail car je suis en train de programmer un client/serveur FTP en java dans le cadre de mes etudes.Je suis en train de faire le Javamail [ par kakol ] Bonjour, Je suis en train de développer une application client/serveur qui scanne une boite mail située sur un serveur pop et lors de l'arrivée d'un [SOCKET] Obtention des flux [ par xeon666 ] Bonjour, Je creer actuellement un petit modele client-serveur en utilisant les sockets ... J'ai cependant un probleme : Je lance mon serveur et un Tchatche [ par mimosa803 ] Bonjour, j'ai développer une petite application de tchatche entre un serveur et un client. Le serveur se lance en 1 er lieu pour vérifier s'il ya des client ftp java [ par abousaid ] Bonjour à tous,Je suis en train de programmer un client ftp en java et j'ai un problème.J'arrive à me connecter sans problème au serveur, j'arrive à t client serveur [ par infoRam ] Bonjour, Je suis en train de découvrir le joyeux monde des "socket"... Pour l'instant je n'y connais absolument rien si ce n'est le principe global de éxécution de client serveur [ par infoRam ] salut tout le mondej'ai un probleme dans un programme client serveur aprés l'exécution j'arrive pas au resulta souhaiterregarder la sourceServeur :::: bureau à distance [ par biloovert81 ] salut:dans mon context de travail j'ai besoin 2 stations client et serveur (pas ds la même poste), mais le serveur à certain moment veut controler la


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.