Boa tarde amigos do forum.
Estou fazendo um programinha de cliente e servidor via socket, aonde quando execulto o servidor, o servidor fica esperando uma conexão, quando execulto o cliente, o cliente se conecta ao servido e eles ficam conversando entre si, ou seja troca de mensagem, so q agora estou querendo fazer com que o cliente requesite um arquivo do servidor. Supomos que o cliente digite no JTextField " /listfile ", aparecerá na JTextArea do cliente a lista de arquivos ou um arquivo pre-definido no servidor. Aonde o cliente depois de visualizado os arquivos, possa abrir em TXT ou ate mesmo fazer o download desse arquivo. Como fazer isso ? Vou postar aqui os codigos do servidor e do cliente para q vcs possam olhar e analizar !
====== Servidor =======
//esse programa configura um servidor q irá receber uma conexão com um cliente apenas
//pacotes que iremos usar
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
//pacote para criar uma interface grafica
import javax.swing.*;
public class Servidor extends JFrame {
private JTextField campoTexto;//aonde vc digita o texto
private JTextArea areaTexto;//aonde aparecerá o texto
private ObjectOutputStream saida;//saida de bits
private ObjectInputStream entrada;//entrada de bits
private ServerSocket servidor;//variavel para criar o servidor
private Socket conexao;//variavel para a conexao com socket
private int cont = 1;// contador
//configurando uma GUI
public Servidor()
{
super("=== Servidor ===");
Container gui_servidor = getContentPane();
//cria um enterfield e registra listener
campoTexto = new JTextField();
campoTexto.setEnabled(false);
campoTexto.addActionListener(new ActionListener()
{
//envia mensagem para o cliente
public void actionPerformed(ActionEvent e)
{
enviaDados(e.getActionCommand());
}
});//fim da chamada para addActionListener
gui_servidor.add(campoTexto, BorderLayout.NORTH);
//cria a area de display
areaTexto = new JTextArea();
gui_servidor.add(new JScrollPane(areaTexto),BorderLayout.CENTER);
setSize(600, 600);
setVisible(true);
}
//configura e executa o servidor
public void runServidor()
{
//configura o servidor para receber conexões;
//processa conexões
try
{
//etapa 1: cria um serverSocket
servidor = new ServerSocket(5000,100);
while(true)
{
//etapa 2: espera uma conexão
esperaConexao();
//etapa 3: obtém fluxos de entrada e de saída
getStreams();
//etapa 4: Processa a conexão
processaConexao();
//etapa 5: fecha a conexão
fechaConexao();
++cont;
}
}
//processa EOFException quando o cliente fecha a conexão
catch (EOFException eofex)
{
System.out.println("Conexão terminada com o Cliente");
}
//processa problemas com E/S
catch (IOException ioex)
{
ioex.printStackTrace();
}
}
//espera que a conexão chegue, depois exibe informações sobre a conexão
private void esperaConexao() throws IOException
{
areaTexto.setText("Esperando Conexâo\n");
//permite que o servidor aceite uma conexão
conexao = servidor.accept();
areaTexto.append("Conexão "+ cont + " recebida de: " + conexao.getInetAddress().getHostName());
}
//obtém fluxos para enviar e receber dados
private void getStreams() throws IOException
{
//configura o fluxo de saida para objetos
saida = new ObjectOutputStream(conexao.getOutputStream());
areaTexto.append("\nE/S Streams\n");
}
//processa a conexão com o cliente
private void processaConexao() throws IOException
{
//envia mensagem de conexão bem-sucedida para o cliente
String mensagem = "Servidor>>>> Conexão com Sucesso";
saida.writeObject(mensagem);
saida.flush();
//habilita campoTexto para que o usuario do servidor
//possa enviar mensagens
campoTexto.setEnabled(true);
//processa mensagens enviadas a partir do cliente
do
{
//lê a mensagem e a exibe
try
{
mensagem = (String) entrada.readObject();
areaTexto.append("\n" + mensagem);
areaTexto.setCaretPosition(areaTexto.getText().length());
}
//captura problemas ocorridos durante a leitura do cliente
catch (ClassNotFoundException classNotFEx)
{
areaTexto.append("\nTipo de objeto recebido desconhecido");
}
}
while( !mensagem.equals("Cliente>>>> Terminado"));
}
//fecha fluxos e soquetes
private void fechaConexao() throws IOException
{
areaTexto.append("\nConexão terminada com o Cliente");
campoTexto.setEnabled(false);
saida.close();
entrada.close();
conexao.close();
}
//envia mensagem para o cliente
private void enviaDados( String mensagem )
{
//envia objeto para o cliente
try
{
saida.writeObject("Servidor>>>>" + mensagem);
saida.flush();
areaTexto.append("\nServidor>>>>" + mensagem);
}
//processa problemas ocorridos durante o envio do objeto
catch (IOException ioex)
{
areaTexto.append("\nEscrevendo o erro do objeto");
}
}
//executa o aplicativo
public static void main (String args[])
{
Servidor app = new Servidor();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.runServidor();
}
}// fim da classe Servidor
====== Cliente ======
//esse programa configura um cliente q irá receber uma conexão com um servidor apenas
//pacotes que iremos usar
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
//pacote para criar uma interface grafica
import javax.swing.*;
public class Cliente extends JFrame
{
private JTextField campoTexto;
private JTextArea areaTexto;
private JButton diretorios;
private ObjectOutputStream saida;
private ObjectInputStream entrada;
private String mensagem = "";
private String batePapo;
private Socket cliente;
//inicializa bate-papo e configura a GUI
public Cliente( String host )
{
super( "Cliente" );
//configura o servidor ao qual o cliente se conecta
batePapo = host;
Container gui_cliente = getContentPane();
//cria campoTexto e registra ouvinte
campoTexto = new JTextField();
campoTexto.setEnabled( false );
campoTexto.addActionListener(
new ActionListener()
{
//envia mensagem para ao servidor
public void actionPerformed(ActionEvent e)
{
enviaDados( e.getActionCommand() );
}
});//fim da chamada para addActionListener
gui_cliente.add( campoTexto, BorderLayout.NORTH );
//cria area de display
areaTexto = new JTextArea();
gui_cliente.add( new JScrollPane(areaTexto), BorderLayout.CENTER);
setSize(300,300);
setVisible(true);
//cria o botao de diretorio
diretorios = new JButton("Requerer Arquivo do Servidor");
diretorios.setEnabled(false);
setSize(300, 300);
gui_cliente.add(new JScrollPane(diretorios), BorderLayout.SOUTH);
setSize(300, 300);
setVisible(true);
}
//conecta-se ao servidor e processa as mensagens do servidor
public void runCliente()
{
//conecta ao servidor, obtém fluxos, processa a conexão
try
{
//etapa 1: cria um socket para fazer a conexão
conectaServidor();
//etapa 2: obtém os fluxos de entrada e de saida
getStreams();
//etapa 3: processa a conexão
processaConexao();
//etapa 4: fecha a conexão
fechaConexao();
}
//servidor fechou a conexão
catch ( EOFException eofException )
{
System.out.println( "Conexão terminada com o Servidor" );
}
//processa problemas na comunicação com o servidor
catch ( IOException ioException )
{
ioException.printStackTrace();
}
}
//obtém fluxos para enviar e receber dados
private void getStreams () throws IOException
{
//configura fluxo de saida para objetos
saida = new ObjectOutputStream( cliente.getOutputStream() );
//descarrega o buffer de saida para enviar informações de cabeçalho
saida.flush();
//configura o fluxo de entrada para objetos
entrada = new ObjectInputStream( cliente.getInputStream() );
areaTexto.append( "\nE/S Streams\n" );
}
//conecta-se ao servidor
private void conectaServidor () throws IOException
{
areaTexto.setText( "Tentando Conectar\n" );
//cria socket para fazer a conexão ao servidor
cliente = new Socket( InetAddress.getByName(batePapo), 5000 );
//exibe informações sobre a conexão
areaTexto.append( "Conectado de : " + cliente.getInetAddress().getHostName() );
}
//processa a conexão com o servidor
private void processaConexao () throws IOException
{
//habilita campoTexto para que o cliente possa enviar mensagens
campoTexto.setEnabled( true );
//habilita o botao de diretorio para que o cliente possa enviar mensagens
diretorios.setEnabled( true );
//processa mensagens enviadas do servidor
do
{
//lê mensagem e a exibe
try
{
mensagem = ( String ) entrada.readObject();
areaTexto.append( "\n" + mensagem );
areaTexto.setCaretPosition( areaTexto.getText().length() );
}
//captura problemas na leitura do servidor
catch(ClassNotFoundException classNotFoundException)
{
areaTexto.append("\nTipo de objeto recebido desconhecido");
}
}
while( !mensagem.equals( "Servidor>>>> Terminado" ) );
}
//fecha fluxos e soquete
private void fechaConexao () throws IOException
{
areaTexto.append( "\nConexão fechada" );
saida.close();
entrada.close();
cliente.close();
}
//envia mensagem para o servidor
private void enviaDados( String mensagem )
{
//envia objeto para o servidor
try
{
saida.writeObject( "Cliente>>>>" + mensagem );
saida.flush();
areaTexto.append( "\nCliente>>>>" + mensagem );
}
//processa problemas no envio do objeto
catch ( IOException ioException )
{
areaTexto.append( "\nEscrevendo o erro do objeto" );
}
}
//executa o aplicativo
public static void main ( String args[] )
{
Cliente app;
if( args.length == 0 )
app = new Cliente( "localhost" );
else
app = new Cliente( args[0] );
app.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
app.runCliente();
}
}//fim da classe Cliente