Socket (Cliente x Servidor) com Threds

Pessoal, alguém pode me dizer onde estou errando na implementação de socket com threds, tanto no código Cliente e Servidor quando rodo com debug, ele não inicia a thred com o comando t.start();

alguém pode me orientar o erro apresentado é esse

erro

Algum problema ocorreu ao enviar dados pelo socket. java.net.SocketException: Connection reset
Algum problema ocorreu ao enviar dados pelo socket. java.net.SocketException: Connection reset

Cliente

package Conexao.prototipo;

import java.net.*;  
import java.util.ArrayList;
import java.io.*;  
import javax.swing.JOptionPane;
import IGrafica_Services.Janela;

 
public class Cliente extends Thread {  
 
private static final long serialVersionUID = 1L;
public  int portaServer;
public  String ipServer;
public  String mensagem;
public  Socket socket=null;  
public static  PrintStream saida;  
public  BufferedReader entrada;
public String men;
public String lord[] = new String[6];
public static boolean done = false;
  
public Cliente(Socket s){
	socket = s;
}

   public Cliente() {
	// TODO Auto-generated constructor stub
}

public void Client(String host,int port){  
      
    ipServer = host;  
    portaServer = port;         
  
   }  
public void execClient() throws EOFException, IOException{  
	conectarServer();  
	
                             
    }//fim execClient  

public void conectarServer() throws IOException {  
    
    System.out.println(" Aguardando para conectar...");  
    try {
		socket = new Socket(ipServer,portaServer);
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		JOptionPane.showMessageDialog(null,"Não foi possível estabelecer uma Conexão, certifique-se de que o Servidor está ativo","Erro ao Conectar",JOptionPane.ERROR_MESSAGE);
		this.interrupt();  
		e.printStackTrace();
	}  
	System.out.println("Conectado no ip: "+socket.getInetAddress()+" na porta: "+socket.getPort()+"\n");
   
	ObterFluxo();
	
}
  
public static void main(String[] args) throws EOFException, IOException {
	
	Cliente b = new Cliente();
	
	b.Client("127.0.0.1",7000);
	b.execClient();	
	b.conectarServer();
	b.ExecutarConexao("Dna.audioRecordersvc");
	
}

 public void run(){
	 
	 try{
		 entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		 String linha;
				
		 
		 while(true){
			 
			 //pega o que o servidor enviou
			 
			 linha = entrada.readLine();
			 
			 //verifica se  linha de entrada é válida 
			 
			 if(linha == null){
				 
				 JOptionPane.showMessageDialog(null,"A Conexão foi encerrada");
				
			     break;
				 
				 // caso a linha não seja nula, deve-se imprimila
			 } }
		 
	            
	            String line = entrada.readLine();
	     		  
	      		 if(line!= null){
	      			  
	      			  JOptionPane.showMessageDialog(null,line,"Solicitação Indevida",JOptionPane.INFORMATION_MESSAGE);
	      			 
	      			  line = null;
	      			  	      			   			    			 
	      		  }
	 }
	 
     catch(Exception e){  
      System.out.println("Algum problema ocorreu ao enviar dados pelo socket. " + e);
     }
	       
     done = true;
	 }
 

  public void ObterFluxo()  {  
      
	  try {			  
	         
		 saida   =  new PrintStream(socket.getOutputStream());	  
	  }          
             					
		 catch (IOException e1) {
			JOptionPane.showMessageDialog(null,"Não foi possível criar os fluxos de Entrada e  saida de dados","Erro ao estabelecer Fluxo",JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
		}
		 
	   
}
  public void ExecutarConexao(String n){
	  
	  this.men = n;
	  Envia();
	 }   
 
		public void Envia(){
		 
			
		try{
	 	                  	 
   		  saida.println(men);
   		     		    		  
   		  men = null;
   		    		
         }                 
         catch(Exception e){  
         System.out.println("Algum problema ocorreu ao enviar dados pelo socket. " + saida);
         try {
			conectarServer();
		} catch (IOException e1) {
			JOptionPane.showMessageDialog(null,"Erro grave ocasionado ao se Conectar","Erro na Conexão",JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
		}
		
		Thread t = new Cliente(socket);
		t.start();
         }
         
		}
             
    public void fechaConexao(){  
              
           saida.close();  
           try {
			entrada.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}  
           
			saida.close();  
           try {
        	   socket.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
		Janela muda = new Janela();     
              
		String texto = "A conexão foi cancelada pelo usuario"; 
								
		muda.getAtexto();
		
		muda.setAtexto(texto);
				
		JOptionPane.showMessageDialog(null,"Desconectado do ip "+socket.getInetAddress(),"Desconectado pelo Usuário",JOptionPane.INFORMATION_MESSAGE);
		
   }
}
package Conexao.prototipo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;


public class Servidor extends Thread {
	
	public Runtime run = Runtime.getRuntime();
	public Process prcSistema;  
	public Process Sistema;
  //Declaro o Socket de comunicação
    public  Socket socket;
    public BufferedReader entrada = null;
	PrintStream saida;
	private int cont = 0;
	static Vector clientes;
	          
   String[] Ler = new String [] {"Dna.audioRecordersvc","Dna.filetransfersvc","detectionsvc","configmonitorsvc","dna.timesyncsvc","dna.videoRecordersvc"};
   
   String[] Ser = new String [] {"runaudio","stopaudio","runfile","stopfile","rundetect","stopdetect","runconfig","stopconfig","runtrack","stoptrack","runvideo","stopvideo"};

   
   public Servidor(Socket s){
		socket = s;
	}
	

    public Servidor() {
	// TODO Auto-generated constructor stub
}


	                                      
	public static void main(String[] args) {
					
		clientes = new Vector();	
				
	try{   
		ServerSocket serv = new ServerSocket(7000);	
		
		while(true){
						         
		            //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
				    
					 Socket socket = serv.accept();
					 
					 Thread t = new Servidor(socket);
					 t.start();
		}	 
		 }catch (IOException e) {
				
       	  System.out.println("Erro ocorreu ao se conectar ao Cliente");
			  		        	  
			e.printStackTrace();
		}
					 
		}
	
	public void run(){
		
		try{
		 //Cria um BufferedReader para o canal da stream de entrada e saida de dados do socket s
	    
             entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	     saida   =  new PrintStream(socket.getOutputStream());
	    
	     clientes.add(saida);
	     
	     String linha = null;
         
	     linha = entrada.readLine();
	  	     	     	     		     	     	     
	     while(linha!= null){
	  	 
		     				     
	     linha = entrada.readLine();
	     
	     }
	    
	   				     
      		
	}catch(IOException e){
		System.out.println("Algum problema ocorreu ao enviar dados pelo socket. " + e);	
	}

	}

}

Oi,

utilize e.printStackTrace para mostrar mais detalhes sobre este erro, você poderá visualizar melhor e quem sabe a analise por cascata faz com que você encontre o problema.

Tchauzin!

Mr. binhole

NA CLASSE CLIENTE.

[code] public static void main(String[] args) throws EOFException, IOException {

	Cliente b = new Cliente();

	b.Client("localhost", 7000);
	b.execClient();
	//b.conectarServer(); <------<< ????????? O método execClient() já executa este método aqui!!!!!!
	b.ExecutarConexao("Dna.audioRecordersvc");

}

[/code]

Evidencia

[code] public void execClient() throws EOFException, IOException {
conectarServer(); // <------------------<< Olha a execução aqui ó!

}// fim execClient

[/code]

Motivo do erro: Não fechou o socket.

[code]
public void Envia() {

	try {

		saida.println(men);

// men = null;

                   saida.close(); // <-------------<< ALTEREI BEM AQUI!

	} catch (Exception e) {
		System.out.println("Algum problema ocorreu ao enviar dados pelo socket. " + saida);
		try {
			conectarServer();
		} catch (IOException e1) {
			JOptionPane.showMessageDialog(null, "Erro grave ocasionado ao se Conectar", "Erro na Conexão",
					JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
		}

		Thread t = new Cliente(socket);
		t.start();
	}

}[/code]

Ao fechar o socket apenas evitei a exception; o seu código ainda necessita de alguns ajuste para funcionar como vc está querendo.
Ele está com os seguintes problemas:

  1. Objetivo não muito claro.
  2. Falta organização.
  3. Problemas na padronização do código.
  4. Aparente uso inadequado das classes de comunicação.
  5. Padrão da codificação irregular.
  6. Fluxo confuso.
  7. Baixa qualidade na codificação.

Sugestões:

  1. REVISÃO da teoria sobre sockets.
  2. Faça um exemplo bem pequeno e que funcione; depois vá adicionando/modificando mudanças gradativamente sem esquecer de fazer testes a cada pequena mudança.
  3. Verifique a padronização da codificação Java; evite nomes de métodos com letras maiúsculas e nomes de classes com letra minusculas.
  4. Fique atento a dica da lina; muito embora não tenha esquecido de imprimir o stacktrace em todos os casos.

flws