begin process at 2012 02 12 13:55:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

Erreur sur read et readLine sur un Socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur sur read et readLine sur un Socket

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ée 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 programmation réseau "client/serveur" [ par sana83 ] je suis debutante en programmation réseau je veut faire un programme qui envoi des messages entre 1 client et 1 serveur j'ai le code : [b]code clien [PROBLEME] Envoi fichier .txt serveur -> client [ par robx2309 ] Bonsoir tout le monde, Voilà j'ai un problème avec mon programme : Je veux envoyer un fichier .txt d'une machine serveur (OutputStreamWriter) à une m Serveur de tchat (+client si possible) [ par joetn ] jai besoin d'aide pour un Projet : Serveur de tchat (+client si possible) principe un utilisateur qui se connecte au serveur se voit demandé un pseud Socket [ par yasssiinnee ] je dois implémenter un chat en java permettant la conversation entre 2 clients via un serveur qui sert d'intermédiaire. Je dois avoir dans mon program system client/serveur d'offre de services dans un hotel [ par lphgl90 ] le but de ce sujet est de développer un système d'offre de services pour les clients d'un hôtel .architecture client/serveur a deux ou trois tiers ,sa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales