Galera, eu estava precisando fazer um trabalho da faculdade, aonde você teria que colocar um servidor atendendo diferentes clientes, usando multithread.
Eu consegui, e devo agradecer ao Claudio:
http://www.guj.com.br/posts/list/0/2930.java#1021841
Aonde peguei o código dele e adaptei as minhas necessidades.
O nosso servidor:
import java.net.*;
import java.io.*;
/**
*
* @author Valter
*/
public class Servidor implements Runnable {
ServerSocket ss;
public Servidor(int porta) throws Exception {
// informando em qual porta o servidor estará ouvindo
ss = new ServerSocket(porta);
// criando uma nova thread e já estou inicializando ela
new Thread(this).start();
// mensagem iniicial
System.out.println("Servidor ouvindo na porta:" + porta);
}
public void run() {
try {
while (true) {
// aceitando a conexão com o cliente e inicializando a outra thread
new TrataCliente(ss.accept()).start();
System.out.println("Mais um cliente atendido!");
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public static void main(String[] args) {
try {
new Servidor(1024);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
class TrataCliente extends Thread {
private Socket client;
public TrataCliente(Socket s) {
client = s;
}
public void run() {
try {
// aqui vai a sua comunicacao com o cliente
ObjectInputStream oi = new ObjectInputStream(client.getInputStream());
// exibindo na tela o que recebemos do nosso cliente
System.out.println("Chegou isso:" + oi.readObject());
client.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
O nosso cliente:
import java.net.*;
import java.io.*;
/**
*
* @author Valter
*/
public class Cliente extends Thread {
// aqui no nosso caso será o 'localhost' que o ip da própria maquina aonde você executará
private String server;
// neste caso utilizaremos a partir da porta 1024, sendo que menor são para o Sistema Operacional
private int porta;
// aqui será a nossa string que será enviada para o servidor e ficará repetindo diversas vezes
private String texto;
public Cliente(String server, int porta) {
try{
// preparando o buffer para ler a stream (no caso o teclado)
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
// estamos lendo a stream que esta vindo do usuário
texto = inFromUser.readLine();
}catch(Exception e){
e.printStackTrace();
}
this.server = server;
this.porta = porta;
}
public static void main(String[] args) {
try {
// inicializando quem será nosso servidor (nossa máquina)
String server = "localhost";
// o numero da porta
int porta = 1024;
// o numero máx de clientes que podem ser atendidos, mais que isso começaremos a ter muitas exceções
int numeroDeClientes = 10;
for (int i = 0; i < numeroDeClientes; i++) {
// criando um novo cliente para nosso servidor
new Cliente(server, porta).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
try {
while (true) {
// abrindo uma porta para fazermos a comunicação entre nosso cliente e nosso servidor
Socket s = new Socket(server, porta);
// instaciando para enviarmos ao nosso servidor o que digitamos no cliente
ObjectOutputStream oo = new ObjectOutputStream(s.getOutputStream());
// informando aonde estamos conectados
System.out.println("Conectado a " + server + ":" + porta);
// enviando ao nosso servidor a nossa string
oo.writeObject(texto);
//fechando a nossa conexão
s.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Lembrando que para rodar o programa, vá no prompt , localize a pasta onde esta o servidor.java e o cliente.java, então faça o comando:
javac servidor.java
depois
java cliente.java
para testar, em uma janela do prompt você digita:
java servidor
em outra janela, voce digita:
java cliente
então no cliente você colocaria :
11111111111111 (por exemplo)
ao abrir outra janela, coloque:
22222222222222 (por exemplo)
no servidor você verá que fica alternando entre [telefone removido] e 222222222222, e assim vai,rs.
Bem eh isso galera, um forte abraço.
Obrigado GUJ.