Chat em Java usando objetos

Boa tarde. Estou tentando fazer um chat e estou com um erro que não consigo identificar a origem: ‘invalid type code: AC’.

O erro ocorre após a conexão do usuário, quando tento escrever uma mensagem.

Seguem as classes:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package jogo;

import java.io.Serializable;

/**
*

  • @author marcio
    */
    public class Usuario implements Serializable {
    private String nome;

    public Usuario(String nome) {
    this.nome = nome;
    }

    public String getNome() {
    return nome;
    }

    public void setNome(String nome) {
    this.nome = nome;
    }

    @Override
    public int hashCode() {
    int hash = 3;
    return hash;
    }

    @Override
    public boolean equals(Object o) {
    if (o instanceof Usuario) {
    return ((Usuario) o).getNome().equals(getNome());
    }

     return false;
    

    }
    }
    [/code]

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package jogo;

import java.io.*;
import java.net.Socket;

/**
*

  • @author marcio
    */
    public class SocketCliente extends Thread {
    private static Socket conexao;
    private static Usuario usuario;

    public SocketCliente(Socket socket) {
    conexao = socket;
    }

    public static void main(String[] args) throws Exception {
    Socket socket = new Socket(“127.0.0.1”, 9999);

     BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
    
     System.out.println("Digite seu nome:");
    
     String nome = teclado.readLine();
    
     usuario = new Usuario(nome);
    
     ObjectOutputStream saida = new ObjectOutputStream(socket.getOutputStream());
    
     saida.writeObject(usuario);
    
     saida.reset();
    
     Thread execucao = new SocketCliente(socket);
    
     execucao.start();
    
     while (true) {
    
         System.out.println("Mensagem >");
    
         String texto = teclado.readLine();
    
         Mensagem mensagem = new Mensagem(texto, usuario, null);
    
         saida.writeObject(mensagem);
    
         saida.flush();
     }
    

    }

    @Override
    public void run() {
    try {
    ObjectInputStream entrada = new ObjectInputStream(conexao.getInputStream());

         while (true) {
             Mensagem mensagem = (Mensagem) entrada.readObject();
    
             if (usuario.equals(mensagem.getDestinatario())) {
                 System.out.println(mensagem.getDestinatario().getNome() + " disse > " + mensagem.getMensagem());
    
                 System.out.println("Responder >");
             }
         }
     } catch (IOException e) {
         System.out.println("Erro 3: " + e.getMessage());
     } catch (ClassNotFoundException e) {
         System.out.println("Erro 4: " + e.getMessage());
     }
    

    }
    }
    [/code]

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package jogo;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
*

  • @author marcio
    */
    public class SocketServidor extends Thread {
    private static ArrayList usuarios;
    private Socket conexao;
    private Usuario servidor;

    public SocketServidor(Socket conexao) {
    this.conexao = conexao;
    this.servidor = new Usuario(“servidor”);
    }

    public static void main(String[] args) throws Exception {
    usuarios = new ArrayList();

     ServerSocket serverSocket = new ServerSocket(9999);
     
     System.out.println("Servidor rodando");
    
     while (true) {
         Socket socket = serverSocket.accept();
    
         Thread execucao = new SocketServidor(socket);
    
         execucao.start();
     }
    

    }

    @Override
    public void run() {
    ObjectInputStream entrada;
    try {
    entrada = new ObjectInputStream(conexao.getInputStream());

         Object leitura = entrada.readObject();
    
         Usuario usuario = (Usuario) leitura;
    
         if (usuarios.contains(usuario)) {
             System.out.println(usuario.getNome() + " já está na sala.");
             conexao.close();
             return;
         } else {
             System.out.println(usuario.getNome() + " conectado.");
             
             Mensagem mensagem = new Mensagem(usuario.getNome() + " entrou na sala.", servidor, null);
            
             envia(mensagem);
             
             usuarios.add(usuario);
         }
    
         while (true) {
             Object objeto = entrada.readObject();
    
             if (objeto instanceof Mensagem) {
                 Mensagem mensagem = (Mensagem) objeto;
    
                 envia(mensagem);
             }
         }
    
     } catch (IOException e) {
         System.out.println("Erro 1: " + e.getMessage());
     } catch (ClassNotFoundException e) {
         System.out.println("Erro 2: " + e.getMessage());
     }
    

    }

    public void envia(Mensagem mensagem) throws IOException {
    ObjectOutputStream saida = new ObjectOutputStream(conexao.getOutputStream());

     for (Usuario usuario : usuarios) {
         if (!mensagem.getRemetente().equals(usuario)) {
             if ((mensagem.getDestinatario() == null) || (mensagem.getDestinatario().equals(usuario))) {
                 mensagem.setDestinatario(usuario);
    
                 saida.writeObject(mensagem);
             }
         }
     }
    

    }
    }
    [/code]

Alguém pode ajudar?