Socket Dúvida

7 respostas
Jedi_FeniX

Quando passo uma instância da classe java.net.Socket por parâmetro da um erro Socket close, quando tento recuprear os dados, poeque?
Não posso passar a instancia da classe socket como parâmetro?

7 Respostas

feltraco

tb jah usei dessa forma que vc falou e funcionou …
tem que ver o codigo mesmo… :wink:

Quinger

passa o código!

meio dificil ajudar assim…

vlw :smiley:

Jedi_FeniX

o código é este:

Esta classe faz um request para uma outra máquina:

class TestSocket implements Runnable{

   private Socket socket;   

   public TestSocket(Socket socket){
      this.socket = socket;
   }

   public void run(){
      if(this.socket.isConnected()){
         BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
	 PrintWriter pw = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream()));
	 pw.print("GET teste.jsp?nome=teste HTTP/1.0\r\n\r\n");
	 pw.flush();
	 for(String temp = null; (temp = br.readLine()) != null;){System.out.println(temp);}
	 pw.close();
	 br.close();
      }
   }

Esta classe só executa a anterior, é aonde passo o socket:

class Main{

   public void static main(String args[]){
      Socket s = new ConectionFactory.forSocket("10.0.0.2", 80);
      TestSocket t = new TestSocket(s);
      TestSocket t2 = new TestSocket(s);
      ExecutorService es = Executors.newFixedThredPool(2);
      es.execute(t);
      es.execute(t2);
      es.shutdown();
   }
}

Sempre da um erro falando que a socket esta fechada.

<blockquote>

java.io.IOException: Socket Closed

at java.net.PlainSocketImpl.getInputStream(Unknown Source)

at java.net.Socket$2.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.Socket.getInputStream(Unknown Source)

at control.RequestMoQueue.run(RequestMoQueue.java:37)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)</blockquote>
Marky.Vasconcelos

Tem certeza que isso funciona como deveria?

Socket s = new ConectionFactory.forSocket("10.0.0.2", 80);
F

Dá um telnet no IP e na porta para ver se vc consegue acesso desde sua maquina

KWill

Tente rodar de forma “mono-thread” antes e veja se as coisas funcionam. Se funcionar, pode ser que as chamadas aos métodos “close()” das instâncias das classes BufferedReader e PrintWriter estejam “fechando” a sua instância da classe Socket, não permitido a uma Thread concorrente de ler/escrever os dados.

Inté.

I

Não existe nem um problema em vc passa por paremetro o socket .

Melhor vc posta o seu código para darmos uma olhada . Falow

Criado 28 de janeiro de 2008
Ultima resposta 28 de jan. de 2008
Respostas 7
Participantes 7