Java.io.IOException: Pipe not connected

karine -  
 vorax -
Bonjour,

voici mon code, je veux envoyer ce que je lis avec relaybinary dans le pipe pour le transmettre à interpreteur :

private PipedOutputStream relayBinary() throws IOException 
    {
	byte[] buf=new byte[1024];
        PipedOutputStream pipe = new PipedOutputStream();
	int n;

	while (true) {
	    n=fromWebBin.read(buf);
	    pipe.write(buf, 1, n-1);
	   
	}
	return pipe;
    } // !relayBinary

void envoi_reponseWeb_au_client() {
PipedOutputStream pipe = new PipedOutputStream();
pipe = relayBinary();
		
		 
PipedInputStream pipe2 = new PipedInputStream(pipe);
				
			

InputStreamReader input = new InputStreamReader(pipe2);
			
Interpreteur interprete = new Interpreteur(input, url); 
		
}
    


Voici mon erreur : java.io.IOException: Pipe not connected

Est-ce que vous voyez d'où ça provient ?

merci

10 réponses

jebok Messages postés 358 Statut Membre 51
 
Sur quelle ligne se déclenche l'erreur ?
0
karine
 
Ca se déclenche à la ligne

pipe.write(buf, 1, n-1);


dans la methode relayBinary.

Comment je peux corriger ça ?

merci !
0
mamiemando Messages postés 34250 Date d'inscription   Statut Modérateur Dernière intervention   7 901
 
0
karine
 
heu, c'est quoi le connect ?

j'ai jamais fait de pipe avant, donc je suis un peu paumée ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 34250 Date d'inscription   Statut Modérateur Dernière intervention   7 901
 
Aaaahaha tu n'as jamais fait de pipe (prononcer païpe) avant :o)))) C'est ton droit ^^ Oups pardon :o)

Bon en gros un pipe c'est une espèce de tube. Tu écris d'un coté et tu lis de l'autre. Il faut donc que tu le connectes pour définir qui lit et qui écrit. Donc regarde comment ça marche sur le lien ci-dessus.

Un exemple ici :
http://gbm.esil.univ-mrs.fr/~tourai/Java/node16.html#SECTION0214140000000000000000
0
karine
 
Tu veux dire que je dois faire comme ça ?

PipedInputStream in=new PipedInputStream();
PipedOutputStream pipe=new PipedOutputStream(in);
connect(in);
connect(pipe);
0
karine
 
OK, j'ai trouvé, c'était
pipe.connect(in);
in.connect(pipe);

Mais maintenant j'ai une autre erreur, je mets le code :
public  PipedInputStream relayBinary() throws IOException 
    {
	byte[] buf=new byte[1024];
       
	PipedInputStream in=new PipedInputStream();
	PipedOutputStream pipe=new PipedOutputStream(in);
	pipe.connect(in);
	in.connect(pipe);
	
	int n;

	while (true) {
	    n=fromWebBin.read(buf);
	    if (n==-1) break;
	    if (buf[0]==10 && cr) {
	    	sout.write(buf, 1, n-1);
		
		pipe.write(buf, 1, n-1);
		
	    }
	    else {
	    	sout.write(buf, 0, n);
		
		pipe.write(buf, 0, n);
		
	    }
            cr=false;
	}
	pipe.close();
	return in;
    } // !relayBinary

public void envoi_reponseWeb_au_client() {
PipedInputStream pipe = relayBinary();
	
			
InputStreamReader input = new InputStreamReader(pipe);
			
Interpreteur interprete = new Interpreteur(input, url); 
		}
}


et là j'ai l'erreur java.io.IOException: Already connected à la ligne
pipe.connect(in);

J'y comprends rien !!
0
jebok Messages postés 358 Statut Membre 51
 
A mon avis, il suffit de supprimer la ligne
pipe.connect(in);

car la ligne écrite juste au-dessus fait exactement la même chose et apparemment Java n'aime pas faire 2 fois la même chose...
0
mamiemando Messages postés 34250 Date d'inscription   Statut Modérateur Dernière intervention   7 901
 
Essaie de t'inspirer du code qui est là :
http://www.eli.sdsu.edu/courses/spring97/cs596/notes/CGIandServer/CGIandServer.html

Ca à l'air de ressembler à ce que tu veux faire.
0
karine
 
Merci mamiemando mais j'ai abandonné cette histoire de pipe.

Je me retourne le cerveau depuis le début de la semaine !

Donc j'ai tout effacé et je recommence.

mais merci quand même
0
vorax
 
Et ba! Il doit en avoir une grosse pour te retourner le cerveau... ok je sors...
0