[RESOLVIDO] Enviar ArrayList<String> por Socket, esta correto?

3 respostas
SirDominque

Estou tentando enviar um ArrayList de String pelo socket, esta correto esse método de envio?
Não sei como receber ele pelo cliente... Alguém,por favor, me da uma luz?

public void ListaDeUsuarios(ArrayList&lt;String&gt; listaUsuarios, Socket socket) {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream dos = new ObjectOutputStream(bos);
            dos.writeByte(2);
            dos.writeObject(listaUsuarios);
            byte[] msg = bos.toByteArray();

            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.writeInt(msg.length);

            out.write(msg);
            out.flush();
         
            System.out.println("@Encoder/Server/Bytes de Array Enviados para " + socket.getInetAddress().getHostName());

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }

    }

No cliente, eu tenho isso aqui :

@Override
    public void run() {
        while (stopRunning == false) {
            
            try {
                
                if ((socket.isClosed() == true) || (socket.isConnected() == false)) {
                    stopRunning = true;
                    break;
                }
                
                DataInputStream dis = new DataInputStream(socket.getInputStream());
                
                int tamanho = dis.readInt(); // Read Int,
                int tipoMensagem = dis.read(); // Tipo de mensagem

                System.out.println("Cliente*Tamanho DIS : " + tamanho);
                System.out.println("Cliente*TipoMensagem DIS : " + tipoMensagem);
                
                switch (tipoMensagem) {
                    
                    case 0:
                        String mensagemComumPreta = decoding.mensagemComumPreta(dis, tamanho);
                        mainController.getMainviewFrontController().receberMensagemParaMainView(mensagemComumPreta);
                        break;
                    
                    case 1:
                        String mensagemColorida = decoding.mensagemColorida(dis, tamanho);
                        break;
                    
                    case 2:
                        decoding.decodeUserList(dis, tamanho);
                        break;
                    
                    case 3:
                        decoding.notImplemented(dis, tamanho);
                        break;
                    
                    case 4:
                        decoding.notImplemented(dis, tamanho);
                        break;
                    
                    case 5:
                        decoding.notImplemented(dis, tamanho);
                        break;
                    
                    case 6:
                        decoding.notImplemented(dis, tamanho);
                        break;
                    
                    case 7:
                        decoding.mensagemDeErro(dis, tamanho);
                        mainController.getMainviewFrontController().hideLoadingGif();
                        break;
                    
                    case 8:
                        decoding.mensagemDeErroDeLogin(dis, tamanho);
                        mainController.getMainviewFrontController().hideLoadingGif();
                        break;
                    
                    case 9:
                        decoding.mensagemDeSucessoDeLogin(dis, tamanho);
                        mainController.getMainviewFrontController().hideLoadingGif();
                        break;
                    
                    case 10:
                        decoding.notImplemented(dis, tamanho);
                        break;
                    default:
                        System.out.println("@Receiver-Client Failure Detected! - Wrong Protocol ? notLogged?");
                        System.out.println("Protocol Received : " + tipoMensagem);
                        decoding.notImplemented(dis, tamanho);
                        mainController.getMainviewFrontController().hideLoadingGif();
                        break;
                }
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
                closeConnection();
            }
        }
    }

3 Respostas

E

O que você fez (você está entendendo o que está fazendo, irmão? )

byte[] + ByteArrayOutputStream + ObjectOutputStream

O inverso provavelmente é:

byte[] + ByteArrayInputStream + ObjectInputStream

Junte as pecinhas, e boa sorte!

SirDominque

Esta dando alguma coisa errada :

Servidor Saída :

@Encoder/Server/Tamanho da mensagem Sendo Enviada : 75
@Encoder/Server/Bytes de Array Enviados para 127.0.0.1

Cliente saida :

ClienteTamanho DIS : 75
Cliente
TipoMensagem DIS : -84
@Receiver-Client Failure Detected! - Wrong Protocol ? notLogged?
Protocol Received : -84
Connection Closed

O tipo de mensagem era pra ser 2…

SirDominque
public void ListaDeUsuarios(ArrayList<String> listaUsuarios, Socket socket) {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(bos);
            dos.writeByte(2);
            
            ObjectOutputStream oos = new ObjectOutputStream(dos);
            oos.writeObject(listaUsuarios);
            
            byte[] msg = bos.toByteArray();

            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.writeInt(msg.length);

            System.out.println("@Encoder/Server/Tamanho da mensagem Sendo Enviada : " + msg.length);

            out.write(msg);
            out.flush();

            System.out.println("@Encoder/Server/Bytes Enviados para " + socket.getInetAddress().getHostName());

        } catch (Exception e) {
            System.out.println("Error in Transmitter Class!");
            e.printStackTrace();
        }

    }
Criado 10 de julho de 2013
Ultima resposta 11 de jul. de 2013
Respostas 3
Participantes 2