1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Socket receber e enviar arquivos

Não estou conseguindo fazer o seguinte: Preciso Enviar objeto do servidor para cliente Enviar objeto do cliente para servidor * Enviar arquivo zip do servidor para cliente

Queria fazer assim

Cliente - String = "ENVIAR", e input = "objeto"

Servidor - recebe String = "ENVIAR", recebe output= "objeto"

Cliente - String = "RECEBER", e output = "objeto"

Servidor - recebe String = "RECEBER", recebe input= "objeto"

Cliente - String = "ENVIAR DADOS", e outpu = "arquivo.zip"

Servidor - recebe String = "ENVIAR DADOS", recebe input= "arquivo.zip"

So conseguir ate esse codigo.

package main;

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

import modal.Cliente;

public class Servidor implements Runnable {
    private ServerSocket server;

    private boolean inicializado;
    private boolean executando;

    private Thread thread;

    public Servidor(int porta) throws Exception {
        inicializado = false;
        executando = false;

        open(porta);
    }

    public void open(int porta) throws Exception {
        server = new ServerSocket(porta);
        inicializado = true;
    }

    public void close() {

        try {
            server.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }

        server = null;

        inicializado = false;
        executando = false;

        thread = null;    
    }

    public void start() {
        if(!inicializado || executando) {
            return;
        }

        executando = true;
        thread = new Thread(this);
        thread.start();
    }

    public void stop() throws Exception {
        if(!inicializado || executando) {
            return;
        }

        executando = true;
        thread.join();
    }

    @Override
    public void run() {

        while(executando) {
            try {

                    server.setSoTimeout(2500);
                    Socket socket = server.accept();
                    System.out.println("Conexão estabelecida.");
                   ObjectInputStream input = new ObjectInputStream(socket.getInputStream());  
                    ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());   
                    output.flush();   

                    Cliente cliente = (Cliente) input.readObject();  

                    System.out.println(cliente.getRazaoSocial());  

                    cliente.setRazaoSocial("LUIS GUSTAVO");  

                    output.writeObject(cliente);  
                    output.flush();  
                    output.close();

            } catch (SocketTimeoutException e) {
                // Ignorar
            } catch (IOException e) {
                System.out.println(e);
                break;
            } catch (ClassNotFoundException e) {
                System.out.println(e);
                break;
            }
        }
        close();
    }

    public static void main(String[] args) throws Exception {

        System.out.println("Iniciando servidor...");

        Servidor servidor = new Servidor(8031);
        servidor.start();

        System.out.println("Precione ENTER para encerrar o servidor");
        new Scanner(System.in).nextLine();

        System.out.println("Encerrando servidor.");

        servidor.stop();
    }
}
package main;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import modal.Cliente;

public class Client {
    public static void main(String[] args) throws Exception {

        System.out.println("Iniciando Cliente.");
        System.out.println("Iniciando conexão com o servidor.");

        Socket socket = new Socket("10.1.1.17", 8031);
        System.out.println("Conexão Estabelecida");

        ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream());  
        ObjectInputStream objectInput = new ObjectInputStream(socket.getInputStream());

        Cliente cliente = new Cliente();
        cliente.setId("1");
        cliente.setRazaoSocial("TESTE");

        objectOutput.writeObject(cliente);

        Cliente clienteAlterado = (Cliente) objectInput.readObject(); 
        System.out.println("Cliente.: " + clienteAlterado.getRazaoSocial());

        objectOutput.close();
        objectInput.close();
        System.out.println("Encerrando conexão.");

        socket.close();
    }
}
  • Sua classe "Cliente" é serializável? Todos os objetos de dentro da classe "Cliente" são serializávels? Para transportar objetos via socket eles precisam implementar Serializable.

    Douglas Junior   17 de dez de 2014
  • e Sim Vo postar ela

    LUIS GUSTAVO   17 de dez de 2014
  • Você já conseguiu transportar alguma coisa via socket, ao menos uma String? Onde você está com problema, está gerando erro? Adicione mais informações sobre sua dificuldade.

    Douglas Junior   17 de dez de 2014
  • ai que ta String consigo sim, mais vai so a String. Tpw String ="ENVIAR DADOS" blz mais e quando precisar mandar o obj so tem como por 1 input como posso fazer 2 ai q ta o problema tpw input String e input Obj no Cliente

    LUIS GUSTAVO   17 de dez de 2014
  • Não tem como. Socket é via única. Você envia por A e recebe em B. Você deve enviar a String em A e então receber a String em B, depois enviar o Objeto em A e receber o Objeto em B. Se quiser enviar junto, você pode colocar tanto a String quanto o Cliente dentro de um outro Objeto chamado Pacote.

    class Pacote implements Serializable{
       String texto;
       Cliente cliente;
    }

    E então enviar o Pacote via socket.

    Douglas Junior   17 de dez de 2014
Mostrar todos os 8 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java eclipse ou faça a sua própria pergunta.