java.net.SocketException: Connection reset [SOCKET] - Java - Programmation
Marsh Posté le 28-06-2005 à 01:46:15
qu'est-ce que c'est que cette servlet que tu instancies dans un main?
(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)
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 !!^^
Marsh Posté le 28-06-2005 à 00:04:03
Voici mon erreur:
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:
/*
* 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:
/*
* 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