Enviar objetos com NIO

4 respostas
daniel.netti

Pessoal, estou com problemas para reconhecer objetos recebidos com NIO, pra enviar ao client(o client usa socket normal e não NIO) tá tranquilo, mas o client envia um objeto e o server recebe como array de bytes certinho, mas não consegue converter pra object, abaixo o trecho do codigo no server para receber o objeto:

SocketChannel sc =(SocketChannel) k.channel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        try
        {
                buffer.clear();
                int nbyte = sc.read(buffer);
                if(nbyte == -1)
                {
                }
                if (nbyte > 0)
                {
                    buffer.flip();
                    byte[] tdata = new byte[nbyte];
                    buffer.get(tdata,0,nbyte);
                    ByteArrayInputStream buf = new ByteArrayInputStream(tdata);
                    ObjectInputStream in = new ObjectInputStream(buf);
                    //NA LINHA ABAIXO DA ERRO
                    Mensagem m = (Mensagem) in.readObject();
                    System.out.print(m);
               }
      }

Abaixo o trecho que envia o objeto no client:

public static void enviaComando(Mensagem mensagem,Socket s) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream out;

        try {
            if(s!=null){
                out = new ObjectOutputStream(bos);
                byte[] b = bos.toByteArray();
                out = new ObjectOutputStream(s.getOutputStream());
                out.writeObject(mensagem);
                out.flush();
            }else{
            }
        } catch (IOException ex) {

        }
    }

Qualquer ajuda é bem vinda.
Valeu.

4 Respostas

dyorgio

não reinvente a roda.
a não ser que seje estudo…
se precisar de servidor NIO use o MINA da apache ou o Netty do JBoss.

daniel.netti

dyorgio:
não reinvente a roda.
a não ser que seje estudo…
se precisar de servidor NIO use o MINA da apache ou o Netty do JBoss.

Desculpe a ignorancia, mas funcionam pra aplicações Desktop ?

Luca

Olá

Sim

[]s
Luca

daniel.netti

Luca:
Olá

Sim

[]s
Luca

Ok, vou baixar e testar o funcionamento, quanto ao problema acima, ja resolvi segue o envio refeito no cliente:
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos1 = new ObjectOutputStream(bos); oos1.writeObject(mensagem); oos1.flush(); oos1.close(); OutputStream out = s.getOutputStream(); out.write(bos.toByteArray());

Criado 22 de março de 2010
Ultima resposta 22 de mar. de 2010
Respostas 4
Participantes 3