Transferencia de Objetos - Socket

6 respostas
W

To fazendo uma aplicaçãozinha ond eu preciso enviar objetos, via socket … eu estava tentando fazer o seguinte :

Para enviar o objeto

public void sendData(Object pack){
	   try {
		   output.writeUTF(pack.toString());
	   } catch (IOException e) {
		   // TODO Auto-generated catch block
		   e.printStackTrace();
	   }
   }

e pra receber …

Object temp ;
String msg = input.readUTF();
String teste; 
			
System.out.println(msg);
			
temp=(Object) msg;
			
			 
 teste = temp.toString();     // soh pra ver se a string q eu recebi eh igual 
 System.out.println(teste);  // ao objeto criado 
			 
 if(temp instanceof MinhaClasse){
    System.out.println("DEU CERTO EEEEE"); 
 }
 else{
    System.out.println("naum foi o objeto naum");
}

}

O q sera q pode ser ?!? Achu q esse cast q eu fiz naum ta certo …
alguem pode me ajudar ?!?!

valeu ae !!!

6 Respostas

W

Ae … consegui utilizando o ObjectOutputStream
valeu ae !!!

T

Tem como postar como você fez?

ViniGodoy

Dica: Geralmente o ObjectOutputStream é uma porta aberta para profundas dores de cabeça, quando relacionados a Sockets.

O ideal é você entender como o TCP/IP funciona. E construir um protocolo próprio:
http://www.guj.com.br/posts/list/136538.java#735860

Não só vai ser mais econômico em termos de rede, como também vai te poupar de erros impossíveis de corrigir.

T

Desculpa não sabia. Acho que agora foi!!!

ViniGodoy

Use as tags code para postar código:
http://www.guj.com.br/posts/list/50115.java

Senão fica impossível de ler.

T
Desculpa, eu não sabia, é a primeira vez que posto código aqui
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Sockets;

import ObjetosComuns.Objetos;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashSet;

/**
 *
 * 
 */
public class Cliente { //Classe cliente

    private int porta;
    private String ip;
    private String resposta;
    private  HashSet<Objetos> objetos = null;//Tenho uma lista com Objetos do tipo Label que guardo nesta lista

    public Cliente(int porta, String ip) {
        this.porta = porta;
        this.ip = ip;
    }

    public   HashSet<Objetos> perguntaObjetosDaTela() {//Quero o retorno da lista do servidor
        try {
            //
            // Create a connection to the server socket on the server application
            //

            Socket socket = new Socket(ip, porta);

            //
            // Send a message to the client application
            //
           
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject("componentes");

            //
            // Read and display the response message sent by server application
            //
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            objetos =  (HashSet<Objetos>) ois.readObject();
           // resposta = message;
            ois.close();
            oos.close();

        } catch (UnknownHostException e) {
        } catch (IOException e) {
        } catch (ClassNotFoundException e) {
        }
        return objetos;//retorno o Hashset de objetos

    }
    
    

    public String perguntaTamanhoDaTela() {//aqui me retorna o tamanho do jframe, jscroll e panel
        try {
            //
            // Create a connection to the server socket on the server application
            //

            Socket socket = new Socket(ip, porta);

            //
            // Send a message to the client application
            //
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject("inicio");

            //
            // Read and display the response message sent by server application
            //
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            resposta = message;
            ois.close();
            oos.close();

        } catch (UnknownHostException e) {
        } catch (IOException e) {
        } catch (ClassNotFoundException e) {
        }
        return resposta;
    }
}


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

package Sockets;

/**
 *
 * 
 */
import Configuracao.ClienteServidor;
import ObjetosComuns.Objetos;
import Telas.MoverCompo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;

public class Servidor {
    private ServerSocket server;
    private static boolean serveronoff = true;
    private Socket socket = null;



    public Servidor() {
        try {            
            server = new ServerSocket(ClienteServidor.getPorta());
            serveronoff = MoverCompo.clienteservidorenabledisable;
        } catch (IOException e) {
        }
    }

    public static boolean isServeronoff() {
        return serveronoff;
    }

    public static void setServeronoff(boolean serveronoff) {
        Servidor.serveronoff = serveronoff;
    }



    /*public static void main(String[] args) {
        ServerSocketExample example = new ServerSocketExample();
        example.handleConnection();
    }
 */
    public void handleConnection() {
        
         
        // The server do a loop here to accept all connection initiated by the
        // client application
        //
        while (true && serveronoff) {
            try {
                System.out.println("Waiting for client message");
        //
                socket = server.accept();
                new ConnectionHandler(socket);
            } catch (IOException e) {
            }
        }
       System.out.println("Fim da Thread");
    }
}

class ConnectionHandler implements Runnable {
    private Socket socket;
    private String tamanhoDaTela = null;
    private HashSet<Objetos> listaRecuperada = null;

    public String tamanhoDaTela() {//monto a string com o tamanho da tela
        return tamanhoDaTela = (String.valueOf(MoverCompo.getFramex())) + "-"
                + (String.valueOf(MoverCompo.getFramey())) + "-"
                + (String.valueOf(MoverCompo.getJscrollx())) + "-"
                + (String.valueOf(MoverCompo.getJscrolly())) + "-"
                + (String.valueOf(MoverCompo.getJpanelx())) + "-"
                + (String.valueOf(MoverCompo.getJpanely()));
    }

    public ConnectionHandler(Socket socket) {
        this.socket = socket;
        Thread t = new Thread(this);
        t.start();
    }

    public void run() {
        try
        {
            //
            // Read a message sent by client application
            //          
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            if (message.equals("inicio")) {
                //jscrollx,jscrolly,jpanelx,jpanely
                oos.writeObject(tamanhoDaTela());
                System.out.println("Recebi inicio!!!");
            } else if (message.equals("componentes")) {
                //oos.writeObject("Componentes");            
                oos.writeObject(MoverCompo.componentes);
                System.out.println("Recebi componentes!!!"); 
            } else if (message.equals("dados")) {
            }
            //
            // Send a response information to the client application
            //
           
            //oos.writeObject(MoverCompo.componentes);
            //oos.writeObject("Hello");

            ois.close();
            oos.close();
            socket.close();

            System.out.println("Waiting for client message");
        } catch (IOException e) {
        } catch (ClassNotFoundException e) {
        }
    }

   
}

Aqui está no programa principal
                Cliente cliente = new Cliente(porta, ip);
                String s = cliente.perguntaTamanhoDaTela();
                String sizescreem[] = s.split("-");
                framex = Integer.parseInt(sizescreem[0]);
                framey = Integer.parseInt(sizescreem[1]);
                jscrollx = Integer.parseInt(sizescreem[2]);
                jscrolly = Integer.parseInt(sizescreem[3]);
                jpanelx = Integer.parseInt(sizescreem[4]);
                jpanelx = Integer.parseInt(sizescreem[5]);               
                setBounds(0, 0, framex, framey);
                //jpanelx,jpanely;
                setPreferredSize(new java.awt.Dimension(framex, framey));
                getContentPane().add(jScrollPane1);
                jScrollPane1.setBounds(0, 0, jscrollx, jscrolly);
                jScrollPane1.setViewportView(jPanel1);
                jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
                jPanel1.setPreferredSize(new java.awt.Dimension(jpanelx, jpanely));
                jPanel1.setSize(jpanelx, jpanely);
                jPanel1.setLayout(null);
                jPanel1.setAutoscrolls(true);
                jScrollPane1.setAutoscrolls(true);
               // cliente.perguntaObjetosDaTela();
               //até aqui funciona bem
                listaRecuperada = cliente.perguntaObjetosDaTela();//recupero a lista enviada pelo cliente (Neste ponto tenho problemas, nada mais funciona)
                carregaObjetosNaTela.carregar(listaRecuperada);//Aqui tenho um método que carrega a lista de componentes na tela

        }
Criado 20 de novembro de 2004
Ultima resposta 9 de set. de 2010
Respostas 6
Participantes 3