Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/04/2009, 21:14
Fragger1906
 
Fecha de Ingreso: abril-2009
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema Cliente - Servidor Java

y este es el código que estoy usando para el cliente

Código:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Formatter;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Cliente extends JFrame implements Runnable, ActionListener {
    private JTextField jTextField1;
    private JTextField jTextField2;
    private JTextArea jTextArea;
    private JButton boton;
    private String[][] tablero = {{"1", "1", "1", "1", "1", "1", "1", "1", "1"},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "1", "", "1", "1", "1", "1", ""},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", "1"}};
    private int[] ubicacionNaves;
    private int casillaActual;
    private Socket conexion;
    private Scanner entrada;
    private Formatter salida;
    private String host;
    private String turno;
    private boolean miTurno;
    private final String MARCA_1 = "1"; // mark for first client
    private final String MARCA_2 = "2"; // mark for second client
    public Cliente(String host) {
        super("Cliente");
        this.host = host;
        jTextArea = new JTextArea(4, 30);
        jTextArea.setEditable(false);
        add(new JScrollPane(jTextArea), BorderLayout.CENTER);
        System.out.println("Cliente: Inicializada Area de Texto");
        jTextField1 = new JTextField();
        jTextField1.setEditable(false);
        add(jTextField1, BorderLayout.NORTH);
        System.out.println("Cliente: Inicializada TextField 1");
        jTextField2 = new JTextField();
        jTextField2.setEditable(true);
        jTextField2.addActionListener(this);
        add(jTextField2, BorderLayout.SOUTH);
        System.out.println("Cliente: Inicializada TextField 2");
        ubicacionNaves = new int[15];
        getNaves();
        setSize(300, 225);
        setVisible(true);
        iniciarCliente();
        System.out.println("Cliente: Iniciando Cliente...");
    }
    private void getNaves() {
        int index = 0;
        int ubicacion = 0;
        for (int i = 0; i < tablero.length; i++) {
            for (int y = 0; y < tablero[0].length; y++) {
                if (tablero[i][y].equals("1")){
                    ubicacionNaves[index] = ubicacion;
                    index++;
                }
                ubicacion++;
            }
        }
    }
    public void iniciarCliente() {
        try {
            conexion = new Socket(InetAddress.getByName(host), 12345);
            entrada = new Scanner(conexion.getInputStream());
            salida = new Formatter(conexion.getOutputStream());
            System.out.println("Cliente: Cliente iniciado");

            //Para enviar el tablero, envia un negativo
            for(int i = 0; i<ubicacionNaves.length; i++){
                int temp = ubicacionNaves[i];
                int temp2 = temp * 2;
                salida.format("%d\n", temp-temp2);
                salida.flush();
            }
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        ExecutorService worker = Executors.newFixedThreadPool(1);
        System.out.println("Cliente: Ejecutor Iniciado");
        worker.execute(this);
        System.out.println("Cliente: Hilo Iniciando");
    }
    public void run() {
        turno = entrada.nextLine();
        System.out.println("Cliente: Capturando Turno");

        SwingUtilities.invokeLater(
                new Runnable() {

                    public void run() {
                        jTextField1.setText("Eres el jugador\"" + turno + "\"");
                        System.out.println("Cliente: Indicando Turno");
                    }
                });
        miTurno = (turno.equals(MARCA_1));
        System.out.println("Cliente: Asignando Turno");
        while (true) {
            if (entrada.hasNextLine()) {
                procesarMensaje(entrada.nextLine());
                System.out.println("Cliente: Capturando Mensajes");
            }
        }
    }
    private void procesarMensaje(String mensaje) {
        if (mensaje.equals("Jugada Valida.")) {
            mostrarMensaje("Jugada Valida, espere.\n");
            System.out.println("Cliente: Procesando Jugada Valida");
        } else if (mensaje.equals("Jugada Invalida, prueba otra vez")) {
            mostrarMensaje(mensaje + "\n");
            miTurno = true;
            System.out.println("Cliente: Procesando Jugada invalida");
        } else if (mensaje.equals("Movida Oponente")) {
            int location = entrada.nextInt();
            entrada.nextLine();
            int row = location / 3;
            int column = location % 3;
            mostrarMensaje(Integer.toString(location));
            mostrarMensaje("Movida del Oponente. Su turno.\n");
            miTurno = true;
            System.out.println("Cliente: Procesando jugada del oponente");
        } else if (mensaje.equals("Conexion Rechazada\n")) {
            JOptionPane.showMessageDialog(rootPane, "Conexion Rechazada desde el Servidor");
        } else {
            mostrarMensaje(mensaje + "\n");
        }
    }
    private void mostrarMensaje(final String mensaje) {
        SwingUtilities.invokeLater(
                new Runnable() {

                    public void run() {
                        jTextArea.append(mensaje);
                        System.out.println("Cliente: Mostrando mensaje");
                    }
                });
    }

    public void enviarJugada(int location) {
        if (miTurno) {
            salida.format("%d\n", location);
            salida.flush();
            miTurno = false;
            System.out.println("Cliente: Enviando Jugada");
        }
    }
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jTextField2) {
            int num = Integer.parseInt(jTextField2.getText());
            enviarJugada(num);
            jTextField2.setText("");
            System.out.println("Cliente: Capturando Evento");
        }
    }
}
tuve que poner todo eso en diferentes mensajes por que eran muchos caracteres, sepan perdonar