Jogo do Stop (Adedanha) em rede

Olá à todos.

Preciso fazer um jogo simples, tipo do stop em rede. Como sou novato em Socket, preciso de umas ajudas…

Acho que consegui conectar o cliente ao servidor (testei só no meu pc). Porém, não to conseguindo fazer com que tudo que o servidor faça, apareça para o cliente.

Tipo, eu tenho um botão de gerar letra que só aparece para quem criou a sala. E eu to querendo que, quando o botão for apertado, apareça para o outro jogador a letra gerada.

Meu professor falou pra usar o readUTF… só que não estou conseguindo usar no evento do botão… se poderem me ajudar, eu agradeço.

Aí vão os códigos:


 public class Login extends javax.swing.JFrame {  
  
    public Login() {  
        initComponents();  
    }  
  
    @SuppressWarnings("unchecked")  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                            
    private void initComponents() {  
  
        buttonGroup1 = new javax.swing.ButtonGroup();  
        criarSala = new javax.swing.JRadioButton();  
        entrarSala = new javax.swing.JRadioButton();  
        apelido = new javax.swing.JLabel();  
        apelido1 = new javax.swing.JTextField();  
        apelido2 = new javax.swing.JLabel();  
        txtApelido2 = new javax.swing.JTextField();  
        ipSala = new javax.swing.JLabel();  
        txtIpSala = new javax.swing.JTextField();  
        portaSala = new javax.swing.JLabel();  
        txtPortaSala = new javax.swing.JTextField();  
        entrar = new javax.swing.JButton();  
        jLabel5 = new javax.swing.JLabel();  
  
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
        addWindowListener(new java.awt.event.WindowAdapter() {  
            public void windowOpened(java.awt.event.WindowEvent evt) {  
                formWindowOpened(evt);  
            }  
        });  
  
        buttonGroup1.add(criarSala);  
        criarSala.setSelected(true);  
        criarSala.setText("Criar sala");  
        criarSala.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                criarSalaActionPerformed(evt);  
            }  
        });  
  
        buttonGroup1.add(entrarSala);  
        entrarSala.setText("Entrar em uma sala");  
        entrarSala.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                entrarSalaActionPerformed(evt);  
            }  
        });  
  
        apelido.setText("Apelido: ");  
  
        apelido2.setText("Apelido: ");  
  
        ipSala.setText("IP da sala:");  
  
        portaSala.setText("Porta:");  
  
        txtPortaSala.setText("12345");  
  
        entrar.setText("Entrar");  
        entrar.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                entrarActionPerformed(evt);  
            }  
        });  
  
        jLabel5.setFont(new java.awt.Font("Lucida Sans Unicode", 1, 14));  
        jLabel5.setText("BEM-VINDO AO iSTOP !");  
  
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());  
        getContentPane().setLayout(layout);  
        layout.setHorizontalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(layout.createSequentialGroup()  
                .addContainerGap()  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                    .addComponent(criarSala)  
                    .addGroup(layout.createSequentialGroup()  
                        .addComponent(apelido)  
                        .addGap(10, 10, 10)  
                        .addComponent(apelido1, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 4, Short.MAX_VALUE)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)  
                    .addGroup(layout.createSequentialGroup()  
                        .addGap(21, 21, 21)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                            .addComponent(ipSala)  
                            .addComponent(portaSala)  
                            .addComponent(apelido2))  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                            .addComponent(txtApelido2, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)  
                            .addComponent(txtPortaSala, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)  
                            .addComponent(txtIpSala, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)  
                            .addComponent(entrar, javax.swing.GroupLayout.Alignment.TRAILING)))  
                    .addComponent(entrarSala))  
                .addGap(30, 30, 30))  
            .addGroup(layout.createSequentialGroup()  
                .addGap(74, 74, 74)  
                .addComponent(jLabel5)  
                .addContainerGap(77, Short.MAX_VALUE))  
        );  
        layout.setVerticalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(layout.createSequentialGroup()  
                .addContainerGap()  
                .addComponent(jLabel5)  
                .addGap(12, 12, 12)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(criarSala)  
                    .addComponent(entrarSala))  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                    .addGroup(layout.createSequentialGroup()  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                            .addComponent(apelido1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                            .addComponent(apelido))  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))  
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                            .addComponent(txtApelido2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                            .addComponent(apelido2))  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(txtIpSala, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(ipSala))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                    .addComponent(portaSala)  
                    .addComponent(txtPortaSala, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addGap(18, 18, 18)  
                .addComponent(entrar)  
                .addContainerGap())  
        );  
  
        pack();  
    }// </editor-fold>                          
  
    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                    
        apelido2.setVisible(false);  
        ipSala.setVisible(false);  
        portaSala.setVisible(false);  
        txtApelido2.setVisible(false);  
        txtIpSala.setVisible(false);  
        txtPortaSala.setVisible(false);  
    }                                   
  
    private void entrarSalaActionPerformed(java.awt.event.ActionEvent evt) {                                             
        if (entrarSala.isSelected()) {  
            apelido.setVisible(false);  
            apelido1.setVisible(false);  
            apelido2.setVisible(true);  
            ipSala.setVisible(true);  
            portaSala.setVisible(true);  
            txtApelido2.setVisible(true);  
            txtIpSala.setVisible(true);  
            txtPortaSala.setVisible(true);  
        }  
}                                            
  
    private void criarSalaActionPerformed(java.awt.event.ActionEvent evt) {                                            
        if (criarSala.isSelected()) {  
            apelido2.setVisible(false);  
            ipSala.setVisible(false);  
            portaSala.setVisible(false);  
            txtApelido2.setVisible(false);  
            txtIpSala.setVisible(false);  
            txtPortaSala.setVisible(false);  
            apelido.setVisible(true);  
            apelido1.setVisible(true);  
        }  
}                                           
  
    private void entrarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Jogo jogo = new Jogo();  
        final ServidorTCP servidor = new ServidorTCP();  
        final ClienteTCP cliente = new ClienteTCP();  
        if (criarSala.isSelected()) {  
            new Thread(new Runnable() {  
  
                public void run() {  
                   // try {  
                        servidor.runServer();  
                  //  } catch (Exception ex) {  
                    //    Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);  
                    //}  
                }  
            }).start();  
  
        }  
        if (entrarSala.isSelected()) {  
            /*  if (!txtPortaSala.getText().equals("54321")) { 
            JOptionPane.showMessageDialog(null, "Não"); 
 
            } */  
            new Thread(new Runnable() {  
  
                public void run() {  
                    
                        cliente.executa();  
                      
                         
                }  
            }).start();  
        }  
        dispose();  
        jogo.setVisible(true);  
    }                                        
  
    public static void main(String args[]) {  
        java.awt.EventQueue.invokeLater(new Runnable() {  
  
            public void run() {  
                new Login().setVisible(true);  
            }  
        });  
    }  
    // Variables declaration - do not modify                       
    private javax.swing.JLabel apelido;  
    private javax.swing.JTextField apelido1;  
    private javax.swing.JLabel apelido2;  
    private javax.swing.ButtonGroup buttonGroup1;  
    protected static javax.swing.JRadioButton criarSala;  
    private javax.swing.JButton entrar;  
    protected static javax.swing.JRadioButton entrarSala;  
    private javax.swing.JLabel ipSala;  
    private javax.swing.JLabel jLabel5;  
    private javax.swing.JLabel portaSala;  
    private javax.swing.JTextField txtApelido2;  
    private javax.swing.JTextField txtIpSala;  
    private javax.swing.JTextField txtPortaSala;  
    // End of variables declaration                     
} 

 public class Jogo extends javax.swing.JFrame {  
 char v[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'};    
  
  
    public Jogo() {  
        initComponents();  
    }  
  
    @SuppressWarnings("unchecked")  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        comecar = new javax.swing.JButton();  
        jLabel1 = new javax.swing.JLabel();  
        letra = new javax.swing.JLabel();  
        letra1 = new javax.swing.JTextField();  
        nome = new javax.swing.JTextField();  
        jLabel2 = new javax.swing.JLabel();  
        jLabel3 = new javax.swing.JLabel();  
        cor = new javax.swing.JTextField();  
        gerarLetra = new javax.swing.JButton();  
  
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
        addWindowListener(new java.awt.event.WindowAdapter() {  
            public void windowOpened(java.awt.event.WindowEvent evt) {  
                formWindowOpened(evt);  
            }  
        });  
  
        comecar.setText("Começar");  
        comecar.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                comecarActionPerformed(evt);  
            }  
        });  
  
        jLabel1.setText("Letra da Rodada: ");  
  
        letra1.setBackground(new java.awt.Color(247, 246, 246));  
        letra1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N  
  
        jLabel2.setText("Nome");  
  
        jLabel3.setText("Cor");  
  
        gerarLetra.setText("Gerar Letra");  
        gerarLetra.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                gerarLetraActionPerformed(evt);  
            }  
        });  
  
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());  
        getContentPane().setLayout(layout);  
        layout.setHorizontalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(layout.createSequentialGroup()  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                    .addGroup(layout.createSequentialGroup()  
                        .addGap(169, 169, 169)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                            .addComponent(jLabel2)  
                            .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))  
                        .addGap(40, 40, 40)  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                            .addComponent(cor, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)  
                            .addComponent(jLabel3)))  
                    .addGroup(layout.createSequentialGroup()  
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)  
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()  
                                .addGap(19, 19, 19)  
                                .addComponent(jLabel1)  
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)  
                                .addComponent(letra1, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))  
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()  
                                .addGap(112, 112, 112)  
                                .addComponent(letra)))  
                        .addGap(40, 40, 40)  
                        .addComponent(gerarLetra)  
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                        .addComponent(comecar)))  
                .addGap(345, 345, 345))  
        );  
        layout.setVerticalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(layout.createSequentialGroup()  
                .addGap(24, 24, 24)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(comecar)  
                    .addComponent(jLabel1)  
                    .addComponent(letra, javax.swing.GroupLayout.PREFERRED_SIZE, 0, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(gerarLetra)  
                    .addComponent(letra1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addGap(39, 39, 39)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(jLabel2)  
                    .addComponent(jLabel3))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(cor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addContainerGap(243, Short.MAX_VALUE))  
        );  
  
        pack();  
    }// </editor-fold>  
  
    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                    
        letra1.setVisible(false);  
        nome.setEditable(false);  
        cor.setEditable(false);  
        if(Login.criarSala.isSelected()){  
            comecar.setVisible(true);  
            gerarLetra.setVisible(true);              
        } else {  
            comecar.setVisible(false);  
            gerarLetra.setVisible(false);  
        }  
                         
    }                                   
  
    private void comecarActionPerformed(java.awt.event.ActionEvent evt) {                                          
          nome.setEditable(true);  
          cor.setEditable(true);  
          gerarLetra.setEnabled(false);  
    }                                         
  
    private void gerarLetraActionPerformed(java.awt.event.ActionEvent evt) {                                             
        letra1.setVisible(true);  
        letra1.setEditable(false);  
        int indice = (int) ((Math.random()*v.length));  
        String temp= String.valueOf(v[indice]);  
        letra1.setText(temp);  
           
    }                                            
  
  
    public static void main(String args[]) {  
        java.awt.EventQueue.invokeLater(new Runnable() {  
            public void run() {  
                new Jogo().setVisible(true);  
            }  
        });  
    }  
  
    // Variables declaration - do not modify  
    private javax.swing.JButton comecar;  
    private javax.swing.JTextField cor;  
    private javax.swing.JButton gerarLetra;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JLabel jLabel2;  
    private javax.swing.JLabel jLabel3;  
    private javax.swing.JLabel letra;  
    protected static javax.swing.JTextField letra1;  
    private javax.swing.JTextField nome;  
    // End of variables declaration  
  
}

O método read deve ser chamado de dentro de um loop e de preferência numa thread separada. Você está apenas chamando uma vez.

Hmm. Tá.

Mas como e onde faço isso??

To fazendo um programa parecido com esse.
Também queria saber como faz para aparecer na tela do cliente quando aciono um evento.

Bah, não to conseguindo fazer isso.
Já ta batendo o desespero aqui.

Se mais alguém poder ajudar, eu agradeço… E MUITO!

Vou dar uma dica: “ajude as pessoas a te ajudarem”

Poucos aqui terão tempo e disposição para analisar esse código imenso.

Poste um código menor, contendo só as partes mais significativas. Além de ficar mais fácil de analisar o problema, também demonstra que você está se esforçando e fazendo sua parte.

Tenho certeza que as respostas virão!

Bah cara tu posto ateh a instância dos componentes
hehe
fico difícil de ler tudo…

Se teu jogo vai ser em lan, e abos vão interagir, os dois lados vão ser cliente e servidor, logo
vc vai ter que ter duas threads rodando em um while, uma recebendo dados e outra enviando…

vi que vc ja sabe como obter o host do cliente, então eh só enviar para a porta dele o comando que vc quer
que execute no cliente…

AEEE GENTE!

Consegui fazer o que eu tava querendo, que era aparecer a letra gerada pelo servidor no cliente. Criei uma classe ‘conexão’ que tem os métodos conectServer, conectClient, read e write. Agora eu queria saber como faço para quando o servidor clicar em começar partida, habilite para o cliente os campos para digitar um nome com a letra tal, uma cor com a letra tal e assim por diante…

Ah, e desculpem os códigos enormes.

//formWindowOpened do Cliente

new Thread(new Runnable() {

                    public void run() {
                        while (true) {
                            try {
                                String r = conect.read();
                                letra1.setText(r);
                            } catch (IOException ex) {
                                Logger.getLogger(Jogo.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                }).start();

//botão começar só fica visivel para o servidor
 private void comecarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        nome.setEditable(true);
        cor.setEditable(true);
        gerarLetra.setEnabled(false);


//código que eu fiz para gerar a letra no botão 'gerador'

int indice = (int) ((Math.random() * v.length));
            String temp = String.valueOf(v[indice]);
            conect.write(temp);
            letra1.setText(temp);

Do jeito que está o servidor é capaz de enviar a letra sorteada, e o cliente exibe. Mas repare que isso não será suficiente para controlar todo o fluxo do jogo, por exemplo:

  • O servidor precisa avisar que o jogo começou para que o cliente habilite os campos (essa é a parte que vc observou)
  • O servidor precisa avisar que o tempo para escrever as palavras terminou, para que o client desabilite outra vez os campos.
  • O client deve enviar ao servidor as palavras digitadas.
  • O servidor envia o placar ao client.
  • etc

O que você precisa agora é de um protocolo de comunicação, ou seja: definir um padrão para cada mensagem necessária durante o andamento do jogo. Essas mensagens são strings especiais contendo toda a informação necessaria. O formato dessas mensagens é você quem define, e tanto o client quanto o server devem fazer o tratamento adequado a cada mensagem.

Sim, eu sei.

Criei uma classe “mensagem” para habilitar os JTextFields, só que eu não sei como chamar ela.

Deem uma olhada nesses codigos:

public class Conexao {

    private Socket socket;

    public void conectServer(int porta) throws IOException {
        ServerSocket serverSocket = new ServerSocket(porta);
        socket = serverSocket.accept();
    }

    public void conectClient(String ip, int porta) throws UnknownHostException, IOException {
        socket = new Socket(ip, porta);
    }

    public void close() throws IOException {
        socket.close();
    }

    public void write(Mensagem comecar) throws IOException {
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
        out.writeObject(comecar);
    }

    public String read() throws IOException {
        ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
        return in.readUTF();
    }
}
public class Mensagem {

    public void comecar(){
        Jogo.nome.setEnabled(true);
    }
}

Você já tem a thread que recebe dados do servidor e já tem a classe de tratamento das mensagens, certo?
Então, agora só falta juntar as duas coisas.

public void run() {
  Mensagem mensagem = new Mensagem(); // Cria uma instância da sua classe de tratamento de mensagens.
  while (true) {
     try {
        // Aqui vem uma alteração importante: Não pense mais que o dado recebido é apenas uma letra.
        // É uma mensagem de comunicação, que pode indicar vários eventos.
        String m = conect.read();
        mensagem.tratarMensagem(m);
     } catch (IOException ex) {
         Logger.getLogger(Jogo.class.getName()).log(Level.SEVERE, null, ex);
         // Outra coisa... melhore esse tratamento de exceção. Do jeito que está só vai gravar no log mas o usuário nem fica sabendo que aconteceu algo errado.
     }
   }
}

Agora vamos ver as mensagens propriamente ditas: como eu disse anteriormente, fique à vontade para definir um padrão. Só como exemplo, suponha que a mensagem de início de jogo seja:
JOGO_INICIADO:A ou JOGO_INICIADO:B , etc. ou seja: “JOGO_INICIADO:” + letraSorteada

public class Mensagem {   
    public void tratarMensagem(m) {
          // Aqui você faz um teste para saber qual o tipo de mensagem.
          // Tudo que o servidor enviar sera tratado aqui

          if (/* verificar se a mensagem recebida começa com JOGO_INICIADO */) {
                letra = /*pegar a letra, que é a parte depois do ":" */;
                comecar(letra);
          
          }  else if (/* Testa as demais mensagens que pode receber durante o jogo, fazendo o tratamento adequado */) {

          } else if (/* Testa as demais mensagens que pode receber durante o jogo, fazendo o tratamento adequado */) {

         }
    }

    private void comecar(String letra){
        Jogo.nome.setEnabled(true);
        letra1.setText(letra);   
    }   

    /* Outros metodos para tratar situacoes diversas... */
}  

Naturalmente tando o client quanto o server precisam respeitar o protocolo. Ou seja, modifique o servidor para mandar tudo no mesmo formato que o cliente está esperando.

É mais ou menos isso… acho que já dá pra ter uma idéia de que caminho seguir, se tiver duvidas vai postando.

[quote=gomesrod]Você já tem a thread que recebe dados do servidor e já tem a classe de tratamento das mensagens, certo?
Então, agora só falta juntar as duas coisas.

public void run() {
  Mensagem mensagem = new Mensagem(); // Cria uma instância da sua classe de tratamento de mensagens.
  while (true) {
     try {
        // Aqui vem uma alteração importante: Não pense mais que o dado recebido é apenas uma letra.
        // É uma mensagem de comunicação, que pode indicar vários eventos.
        String m = conect.read();
        mensagem.tratarMensagem(m);
     } catch (IOException ex) {
         Logger.getLogger(Jogo.class.getName()).log(Level.SEVERE, null, ex);
         // Outra coisa... melhore esse tratamento de exceção. Do jeito que está só vai gravar no log mas o usuário nem fica sabendo que aconteceu algo errado.
     }
   }
}

Agora vamos ver as mensagens propriamente ditas: como eu disse anteriormente, fique à vontade para definir um padrão. Só como exemplo, suponha que a mensagem de início de jogo seja:
JOGO_INICIADO:A ou JOGO_INICIADO:B , etc. ou seja: “JOGO_INICIADO:” + letraSorteada

public class Mensagem {   
    public void tratarMensagem(m) {
          // Aqui você faz um teste para saber qual o tipo de mensagem.
          // Tudo que o servidor enviar sera tratado aqui

          if (/* verificar se a mensagem recebida começa com JOGO_INICIADO */) {
                letra = /*pegar a letra, que é a parte depois do ":" */;
                comecar(letra);
          
          }  else if (/* Testa as demais mensagens que pode receber durante o jogo, fazendo o tratamento adequado */) {

          } else if (/* Testa as demais mensagens que pode receber durante o jogo, fazendo o tratamento adequado */) {

         }
    }

    private void comecar(String letra){
        Jogo.nome.setEnabled(true);
        letra1.setText(letra);   
    }   

    /* Outros metodos para tratar situacoes diversas... */
}  

Naturalmente tando o client quanto o server precisam respeitar o protocolo. Ou seja, modifique o servidor para mandar tudo no mesmo formato que o cliente está esperando.

É mais ou menos isso… acho que já dá pra ter uma idéia de que caminho seguir, se tiver duvidas vai postando.
[/quote]

Também sou meio novato no assunto, mas pelo que eu observei desse código, o tratarMensagem não deveria ser assim:

  public void tratarMensagem(String msg) {
          // Aqui você faz um teste para saber qual o tipo de mensagem.
          // Tudo que o servidor enviar sera tratado aqui

          if (Jogo.jogo_iniciado == 1) {
                String letra = Jogo.letra1.toString();
                comecar(letra);
         }
    }

?

E como ele vai fazer para escrever esse código no evento do botão começar?

Seria algo assim?

private void comecarActionPerformed(java.awt.event.ActionEvent evt) {                                        

        if (true) {
            try {
                jogo_iniciado = 1;
                //  conect.write(mensagem);
                cor.setEditable(true);
                gerarLetra.setEnabled(false);

quote=gtesuo tratarMensagem não deveria ser assim:

  public void tratarMensagem(String msg) {
          // Aqui você faz um teste para saber qual o tipo de mensagem.
          // Tudo que o servidor enviar sera tratado aqui

          if (Jogo.jogo_iniciado == 1) {
                String letra = Jogo.letra1.toString();
                comecar(letra);
         }
    }

?

E como ele vai fazer para escrever esse código no evento do botão começar?

Seria algo assim?

[code]
private void comecarActionPerformed(java.awt.event.ActionEvent evt) {

    if (true) {
        try {
            jogo_iniciado = 1;
            //  conect.write(mensagem);
            cor.setEditable(true);
            gerarLetra.setEnabled(false);

[/code][/quote]

Eu estava falando apenas do código no lado Client. Acho que você está pensando um pouco no servidor, que vai controlar o início do jogo.
Procure pensar nesses dois elementos como coisas separadas, assim as coisas vão ficar mais simples!