Pessoal Peguei esse código na net para poder entender e dar continuidade com outras aplicações, já modifiquei ele… A duvida é o seguinte.
Como faco para o servidor enviar uma mensagem quando o cliente se conectar? neste exemplo ele não envia, o cliente tem que enviar primeiro, pois no cliente ja pede para digitar, o servidor tem que enviar primeiro que o cliente.
public class Servidor extends Thread{
public static void main(String args[]){
ServerSocket s = null;
try{//tentando criar uma conexao
s = new ServerSocket(40000);//Cria um SocketServer com porta 40000
System.out.println(" <<Servidor iniciado>>");
System.out.println("<<Aguardando conexão na Porta 40000>>");
while(true){
/* Cria um objeto Socket, mas passando informações características de um servidor,
*no qual somente abre uma porta e aguarda a conexão de um cliente
*/
Socket conexao = s.accept();
System.out.println("Conexao estabelecida com eleitor com o ip: " + conexao.getInetAddress().getHostAddress());
//cria uma thread que envia a conexao
Thread t = new Servidor(conexao);
//inicia a thread t
t.start();
}
}catch(IOException e){
System.out.println("IOException "+e);
}
}
private Socket conexao;
public Servidor(Socket s){//recebe o valor do socket enviado na thread
conexao = s;
}
public void run(){
try{
// Cria uma buffer que irá armazenar as informações enviadas pelo cliente
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
// Cria uma stream de sáida para retorno das informações ao cliente
DataOutputStream outToClient = new DataOutputStream(conexao.getOutputStream());
// Faz a leitura das informações enviadas pelo cliente as amazenam na variável "EscritaCliente"
String EscritaCliente = inFromClient.readLine();
// Imprime a String modificada no console do servidor
System.out.println("Voce Digitou: "+EscritaCliente.length()+" Digitos");
// Imprime a String modificada no console do cliente
outToClient.writeBytes("Voce Digitou: "+EscritaCliente.length()+" Digitos");
}catch(IOException e){
System.out.println("IOException "+e);
}
}
}
public class Cliente extends Thread {
public static void main(String args[]){
try{
// Cria um Socket conexao passando como parâmetro o ip e a porta do servidor
Socket conexao = new Socket("localhost",40000);
System.out.println("Conectado ao servidor " + "localhost" + ", na porta: " + 40000);
//cria uma thread que envia a conexao
Thread t = new Cliente(conexao);
//inicia o thread
t.start();
}catch(IOException e){
System.out.println("IOException"+e);
}
}
private Socket conexao;
public Cliente(Socket s){//recebe o valor do socket enviado na thread
conexao = s;
}
public void run(){
try{//cria uma printstream para pegar as informacoes enviadas do servidor
PrintStream saida = new PrintStream(conexao.getOutputStream());
//cria um bufferedreader para receber informacoes digitadas
BufferedReader teclado = new BufferedReader (new InputStreamReader(System.in));
//escreve uma mensagem ao usuario
System.out.println("entre com algum digito");
//digito recebe o valor digitado pelo usuario
String digito = teclado.readLine();
//imprime o valor de digito
saida.println(digito);
BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
entrada.readLine();
}catch(IOException e){
System.out.println("IOException"+e);
}finally{
try {
conexao.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
segue as classes acima.