Por favor, estou desenvolvendo uma aplicação simples para comunicação via Socket… e não sei como deixar o servidor sempre ativo. em minha classe abaixo… até consigo executar varias requisições com o servidor conectado, porém quando desconecto do Cliente. o servidor também é desconectado e tenho a intenção de mante-lo sempre ativo. se alguém puder me ajudar agradeço.
Classe Servidor
package Conexao.prototipo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {
public static void main(String[] args) throws IOException, InterruptedException {
Runtime run = Runtime.getRuntime();
//Declaro o ServerSocket
ServerSocket serv=null;
//Declaro o Socket de comunicação
Socket socket= null;
BufferedReader entrada = null;
PrintStream saida = null;
//Cria o ServerSocket na porta 7000 se estiver disponível
serv = new ServerSocket(7000);
while (true) {
try{
//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
socket = serv.accept();
//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());
String linha = entrada.readLine();
while (linha != null) {
// Recebe a String para Parar os Serviços
saida.println("escrita");
if(entrada.readLine().equals("pararaudiorecord")) {
run.exec("sc start cisvc"); //para o Serviço FileTranfer
System.out.println(entrada.readLine());
}
}
}
//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io
catch(Exception e){
System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
System.exit(1);
}
//Encerro o socket de comunicação
socket.close();
entrada.close();
}
}}
Classe Cliente
package Conexao.prototipo;
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
import IGrafica_Services.Janela;
public class Cliente {
private static final long serialVersionUID = 1L;
public int portaServer;
public String ipServer,mensagem,pega;
public Socket socket=null;
public static PrintWriter saida;
public BufferedReader entrada,recebe;
public void Client(String host,int port){
ipServer = host;
portaServer = port;
}
public void execClient() throws EOFException, IOException{
conectarServer();
}//fim execClient
public void conectarServer() {
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);
e.printStackTrace();
}
System.out.println("Conectado no ip: "+socket.getInetAddress()+" na porta: "+socket.getPort()+"\n");
}
public void ObterFluxo_executarConexao(String n) {
try {
entrada = new BufferedReader( new InputStreamReader(System.in) );
recebe = new BufferedReader( new InputStreamReader(socket.getInputStream()));
saida = new PrintWriter( socket.getOutputStream(), true );
}
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();
}
try{
saida.println(n);
n = null;
}
catch(Exception e){
System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket. " + saida);
System.exit(1);
}
//try {
//System.out.println(recebe.readLine());
//} catch (IOException e) {
//System.out.println("deu erro");
//e.printStackTrace();
//}
}// fim obterFluxo
public void fechaConexao(){
saida.close();
try {
entrada.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
recebe.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
saida.close();
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String texto = "A conexão foi cancelada pelo usuario";
Janela muda = new Janela();
muda.setAtexto(texto);
JOptionPane.showMessageDialog(null,"Desconectado do ip "+socket.getInetAddress(),"Desconectado pelo Usuário",JOptionPane.INFORMATION_MESSAGE);
}//fim fecha conexao
}