import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import java.util.Scanner;
/**
-----------------------------------------------------------
-- ARTIGO DE PROGRAMACAO MULTITHREAD --
-- APLICACAO MODELO --
-- AUTORES: FERNANDO ORTEGA --
-- GILBERTO MATIAS DE SOUZA --
-- TURMA: 3ATI --
-- ANO: 2009 --
-- PROFESSORA: JUSSARA --
-----------------------------------------------------------
Essa aplicação visa demonstrar como um programa multithread funciona.
Permitindo a conexão de vários usuários ao mesmo tempo e processando
individualmente cada aplicação
*/
public class AplicacaoMultithread {
private static int totalClientes;
/**
* Método de entrada da aplicação
* @param args
*/
public static void main(String[] args) {
try{
//Inicia o contador de clientes da aplicação
AplicacaoMultithread.totalClientes = 0;
//Cria um objeto para monitorar a porta 8080 da máquina
ServerSocket server = new ServerSocket(8080);
//Cria um laço infinito para receber as requisições de conexão com a aplicação
while(true){
System.out.println("Aguardando uma conexão de cliente:");
System.out.println("Número de conexão já recebidas:" +totalClientes );
//Aguarda uma conexão de um usuário
Socket socket = server.accept();
//Cria uma instancia do objeto que irá tratar a requisição
ProcesssRequisicao processsRequisicao = new ProcesssRequisicao(socket);
//Cria um novo thread para separar o fluxo de execução principal do fluxo de execução
//do tratamento da requisição do usuário. Desse modo a aplicação estará pronta para
//receber novas conexões de outros usuários enquanto a conexão atual é tratada por um outro thread
Thread thread = new Thread(processsRequisicao);
//Inicia o fluxo para tratar a requisição
thread.start();
}
}catch (Throwable e) {
e.printStackTrace();
}
}
public static class ProcesssRequisicao implements Runnable{
private Socket socket;
private int numero;
public ProcesssRequisicao(Socket socket){
this.socket = socket;
this.numero = (totalClientes = totalClientes +1);
}
public void run() {
try{
//Pega o stream de retorno
OutputStream ou = socket.getOutputStream();
PrintStream out = new PrintStream(ou);
//Pega o stream de entrada
InputStream in = socket.getInputStream();
//Cria um scanner para facilitar trabalhar com o objeto de entrada
Scanner read = new Scanner(in);
out.println("-----------------------------------------------------------");
out.println("-- TABUADA SERVER ********************* TABUADA SERVER --");
out.println("-- --");
out.println("-- ARTIGO DE PROGRAMACAO MULTITHREAD --");
out.println("-- APLICACAO MODELO --");
out.println("-- AUTORES: FERNANDO ORTEGA --");
out.println("-- GILBERTO MATIAS DE SOUZA --");
out.println("-- TURMA: 3ATI --");
out.println("-- ANO: 2009 --");
out.println("-- PROFESSORA: JUSSARA --");
out.println("-----------------------------------------------------------");
out.println();
out.println();
out.println("Cliente: " + this.numero + "");
out.println();
out.println();
out.println("Qual o seu nome?: ");
//Pega o nome do usuário
String nome = read.nextLine();
boolean repetir = false;
out.println();
out.println("Ola "+nome+", bem vindo ao TabuadaServer");
out.println();
out.println();
out.println("Gostaria de participar de um jogo de Matematica?");
out.println("S(sim)/N(nao): ");
do {
String resp = read.nextLine().toUpperCase();
if(resp.equals("S")){
Random rnd = new Random();
int a = rnd.nextInt(11);
int b = rnd.nextInt(11);
int result = a * b;
out.println(a + " x " + b + " = ");
resp = read.nextLine();
out.println();
out.println();
if(String.valueOf(result).equals(resp)){
out.println("Parabens, voce acertou.");
}else{
out.println("Lamento, voce errou.");
out.println();
out.println("A resposta certa seria: " + result);
}
repetir = true;
out.println();
out.println();
out.println("Deseja jogar novamente?");
out.println("S(sim)/N(nao): ");
}else if(resp.equals("N")){
repetir = false;
}else{
repetir = true;
out.println("S(sim)/N(nao):");
}
} while (repetir);
out.println("Ate a proxima");
socket.close();
}catch (Throwable e) {
e.printStackTrace();
}
}
}
}
Qual o problema que vc está tendo?