[SOCKET]java.net.SocketException: Connection reset

java.net.SocketException: Connection reset [SOCKET] - Java - Programmation

Marsh Posté le 28-06-2005 à 00:04:03    

Voici mon erreur:

Citation :


java.net.SocketException: Connection reset
 at java.net.SocketInputStream.read(Unknown Source)
 at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
 at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
 at sun.nio.cs.StreamDecoder.read(Unknown Source)
 at java.io.InputStreamReader.read(Unknown Source)
 at java.io.BufferedReader.fill(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at myhttp.GrilleServlet.doGet(GrilleServlet.java:84)
 at myhttp.GrilleServlet.main(GrilleServlet.java:127)


Voici le code de l'applet:

Citation :


/*
 * Created on 21 juin 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.applet.*;
import java.io.*;
import java.net.*;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import grille.*;
import java.awt.*;
/**
 * @author moi
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GrilleApplet extends Applet implements Runnable{
     
    private int _port;
    private Socket _soc;
    private Socket _soc2;
    private PrintStream _out;
    private BufferedReader _in;
    private PrintStream _out2;
    private BufferedReader _in2;
    private GrilleIHM _grille;
    private boolean _demarre=false;
    private Thread _monThread;
    public void init(){
        System.out.println("entree dans init()" );
        String p=getParameter("port" );
         if(p!=null){
            _port=Integer.parseInt(p);
         }
          try{
              _soc=new Socket("localhost",80);
              _out=new PrintStream(_soc.getOutputStream());
                 _in=new BufferedReader(new InputStreamReader(_soc.getInputStream()));
                 }
                 catch(IOException e){
                     e.printStackTrace();
                 }
         
    }
    public void start(){
        System.out.println("applet demarré" );
        //Exécution du servlet en envoyant la requête
        //_out.print("GET /servlet/GrilleServlet?PORT_SERVEUR="+_port+" HTTP/1.1" );
        //init du nouveau socket
        try{
            _soc2=new Socket("localhost",21);
            _out2=new PrintStream(_soc2.getOutputStream());
            _in2=new BufferedReader(new InputStreamReader(_soc2.getInputStream()));
            }
            catch(IOException e){
                e.printStackTrace();
            }
        //Ecrire sur le socket "GET_TAILLE_GRILLE"
        _out2.print("GET_TAILLE_GRILLE" );
        //Lire le socket "TAILLE_GRILLE <nbX> <nbY>" Si la lecture est autre que TAILLE_GRILLE alors on continue à lire.
        String ligne=null;
        List params;
         
        try{
            ligne=_in.readLine();
                if(ligne.indexOf("TAILLE_GRILLE" )!=-1){
                    //Décodage de nbX et nbY
                    params=new ArrayList();
                    StringTokenizer t=new StringTokenizer(ligne);
                    while(t.hasMoreTokens()){
                        params.add(t.nextToken());
                    }
                }
             
        }
        catch(IOException e){
            e.printStackTrace();
        }
       
        //Creer l'IHM grille et ajout du panel de l'ihm dans l'applet
        //_grille=new GrilleIHM(Integer.parseInt((String)params.get(1)),Integer.parseInt((String)params.get(2)),null);
        //ajout de grilleIHM a l'applet
        _grille=new GrilleIHM(20,20,null);
        add(_grille.getPanel());
        //_grille.afficherGrille();
        //this.show();
        //this.setVisible(true);
        //
        //démarrage du thread
        _monThread=new Thread(this);
        _monThread.start();
        _demarre=true;
        paint(getGraphics());
        this.getGraphics().drawString("fin de start()",1,1);
    }
    public void run(){
        String ligne=null;
        this.getGraphics().drawString("entree dans run",1,1);
        while(_demarre){
         try{
             while((ligne=_in.readLine()).indexOf("DEPLACER" )==-1){
             }
         }
         catch(IOException e){
             
         }
         //Décodage de m, xD, yD, xA, yA
         List params=new ArrayList();
         StringTokenizer t=new StringTokenizer(ligne);
         while(t.hasMoreTokens()){
             params.add(t.nextToken());
         }
         _grille.setMarque(0,Integer.parseInt((String)params.get(2)),Integer.parseInt((String)params.get(3)));
         _grille.setMarque(Integer.parseInt((String)params.get(1)),Integer.parseInt((String)params.get(4)),Integer.parseInt((String)params.get(5)));
        }
    }
     
    public void paint(Graphics g){
        _grille.get_canvas().paint(g);
    }
    public void stop(){
        if (_monThread!=null){
            _demarre=false;
            _out.print("STOP" );
            _monThread=null;
        }
      }
}


Voici le code de ma main:

Citation :


/*
 * Created on 8 juin 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package myhttp;
 
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.*;
import grilleod.*;
import grilleservletod.GrilleServletOD;
 
import java.io.*;
import java.net.*;
/**
 * @author moi
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GrilleServlet extends MyServletAbstract{
     
    private List params;
    private String _hostName="localhost";
    private int _port=9200;
    private String _ident;
    private GrilleServletOD od;
    private ServerSocket _sos;
    private Socket _soc;
    private GrilleODInt _grilleOD;
    private BufferedReader _in;
    private PrintStream _out;
    private boolean run;
    public void init(){
        //creation du socket de communication avec l'applet
        try{
        _sos=new ServerSocket(21);
       
        }
        catch(IOException e){
            e.printStackTrace();
        }
        //params=servletHttp.get_requete().get_listParams();
        //String prt=params.get(0).toString();
       /*
        //creation de l'objet distribue
        try{
        od=new GrilleServletOD(servletHttp);
        Naming.bind("rmi://" + _hostName + ":" + _port + "/" +"GRILLE_SERVLET",od);
        }
        catch(Exception e){
            //Si erreur j'envoie l'exception à l'applet
            servletHttp.get_os().print(e.toString());
            //return;
        }*/
        //lookup sur GrilleOD
  try{
  _grilleOD = (GrilleODInt)(Naming.lookup("rmi://" +
     _hostName + ":" +
     _port + "/GRILLE" ));
   
  }
  catch(Exception e){
      System.out.println("** IMPOSSIBLE de faire le lookup sur le port " +  
        _port + " de GRILLEOD" );
  }
  run=true;
    }
     
    public void doGet(MyHttpServlet servletHttp) {        
         
       init();
  //boucle sur le socket
       String ligne="";
       try{
           while(run){
               
               _soc=_sos.accept();
               _in=new BufferedReader(new InputStreamReader(_soc.getInputStream()));
               _out=new PrintStream(_soc.getOutputStream());
               
           try{ ligne=_in.readLine();}catch(Exception e){e.printStackTrace();}
            if(ligne.indexOf("GET_TAILLE_GRILLE" )!=-1){
                int nbx=0;
                int nby=0;
                try{
                nbx=_grilleOD.getNbX();
             nby=_grilleOD.getNbY();
                }
                catch(RemoteException e){
                    e.printStackTrace();
                }
                _out.print("TAILLE_GRILLE "+nbx+" "+nby);
                _out.flush();
                //_out.close();
            }
            else //si on recoit stop
                if(ligne.indexOf("STOP" )!=-1){
                    try{
                    Naming.unbind("rmi://" + _hostName + ":" + _port + "/" +"GRILLE_SERVLET" );
                    }
                    catch(Exception e){
                        e.printStackTrace();
                    }
                    od=null;
                    run=false;
                }
            }
       
       }
       catch(IOException e){
          e.printStackTrace();
       }
       
         
    }
   
    public void doPost(MyHttpServlet servletHttp) {
        doGet(servletHttp);
 
    }
    public static void main (String[]args){
        GrilleServlet gr=new GrilleServlet();
        MyHttpServlet maS=null;
        gr.doGet(maS);
    }
}


Voila je ne sais pas ce qui cloche alors que jai réaliser un serveur de socket auparavant qui fonctionne sans problemes avec le meme procede.
Merci

Reply

Marsh Posté le 28-06-2005 à 00:04:03   

Reply

Marsh Posté le 28-06-2005 à 01:46:15    

qu'est-ce que c'est que cette servlet que tu instancies dans un main? :heink:
 
 
(et t'es gentil, les patés de code, personne va les lire, surtout si tu n'expliques pas ce que tu tentes de faire *avant* de balancer la purée, et si tu ne tentes pas d'isoler le problème)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-06-2005 à 02:56:18    

Bon alors le main c'est ce qu'on appelle une methode de test qui me permet de tester mes objets avant de les faire tourner dans mon appli, ca evite bien des recherches.
Ensuite pour l'explication c vrai j'ai ete un peu leger desole.  
Alors le but du jeu c'est de faire communiquer mon applet avec une servlet qui fait office dans ce cas la de serveur de socket. J'ai donc bien sur tente d'isoler le probleme et il apparait sur l'exception que la connection ne se fait pas, j'ai tente de changer le port mais rien y fait alors c'est surement un truc tout con mais je le vois pas ou j'ai pas bien pige le fonctionnement d'un socket.
Ne vous preoccupez pas du code concernant le RMI il n'a pas d'incidence dans ce cas.
voila merci pour vos reponses et n'hesitez pas a me jetter si je suis pas clair, faites moi mal !!^^

Reply

Sujets relatifs:

Leave a Replay

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