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?