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?
Socket Dúvida
7 Respostas
tb jah usei dessa forma que vc falou e funcionou …
tem que ver o codigo mesmo… 
passa o código!
meio dificil ajudar assim…
vlw 
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>
Tem certeza que isso funciona como deveria?
Socket s = new ConectionFactory.forSocket("10.0.0.2", 80);
Dá um telnet no IP e na porta para ver se vc consegue acesso desde sua maquina
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é.
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