Sockets - retornar diretorio de arquivos de outra maquina

4 respostas
eltonbonato

estou tentendo listar os arquivos de uma outra maquina atravéz de sockets
eu fiz o programa faz um tempo e estava funcionando, mas agora voltei a mecher e nao quer funcionar

eu preciso que ao ser passado um comando, no caso, "dir" ele retorne para a maquina a listagem dos arquivos que tem na outra maquina.

ALGUEM PODERIA ME AJUDAR? CASO ALGUEM TIVER OUTRA IDEIA PARA ISTO GOSTARIA QUE ME PASSASE.

print da tela e codigo abaixo...

http://i47.tinypic.com/2namu08.png

Cliente
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class SFTPCLIENTE {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(5678);
		System.out.println("conectando...");
		Socket cliente = server.accept();

		ObjectInputStream input = new ObjectInputStream(cliente.getInputStream());
		ObjectOutputStream output = new ObjectOutputStream(cliente.getOutputStream());

		System.out.println("recebido -> " + input.readUTF());

		if (input.toString() == "true") {
			File[] conteudo = new File("C:/temp").listFiles();
			for (int i = 0; i < 200; i++) {
				output.writeUTF(conteudo[i].toString());
			}		
		}
	}
}
Servidor
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.DataOutputStream;
import java.util.Scanner;

public class SFTPSERVER {
	public static void main(String[] args) throws UnknownHostException,
			IOException {
		Socket cliente = new Socket("localhost", 5678);
		System.out.println("Conectado com o servidor");

		ObjectInputStream input = new ObjectInputStream(cliente.getInputStream());
		ObjectOutputStream output = new ObjectOutputStream(cliente.getOutputStream());

		
		output.writeUTF("dir");

		for (int i = 0; i < 20; i++) {
			System.out.println(input.readUTF());
		}
	}
}

4 Respostas

E

A menos que você saiba o que está fazendo, não compare strings usando isso que você fez (use “equals”).
Outra coisa, se você manda “abobrinha” (“dir”) para um lado, não deve esperar que se transforme em “caviar” (“true”) no outro lado.
Não tem alguma falta de atenção na hora de juntar as versões das classes do seu código não?

maschiojv

Tente colocar esse input.readUTF() em uma variavel e usar ela pra comparar no if.

assim eu acho:

Cliente
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class SFTPCLIENTE {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(5678);
		System.out.println("conectando...");
		Socket cliente = server.accept();

		ObjectInputStream input = new ObjectInputStream(cliente.getInputStream());
		ObjectOutputStream output = new ObjectOutputStream(cliente.getOutputStream());

		String recebido = input.readUTF();

		System.out.println("recebido -> " + recebido);

		if ("true".equals(recebido)) {
			File[] conteudo = new File("C:/temp").listFiles();
			for (int i = 0; i < 200; i++) {
				output.writeUTF(conteudo[i].toString());
			}		
		}
	}
}
eltonbonato

isso ae ta funcionando!

na verdade é o retorno das strings que nao ta vindo

sei la o que acontece…

maschiojv

Tinha uma várias coisas erradas, é melhor ver os comentários...

import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SFTPCLIENTE {

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

		ServerSocket server = new ServerSocket(5678);  
		System.out.println("conectando...");  
		Socket cliente = server.accept();

		//pegando a entrada (saida do server)
		ObjectInputStream input = new ObjectInputStream(cliente.getInputStream());  

		//recebendo...
		String recebido = input.readUTF();
		System.out.println("recebido -> " + recebido);  

		//agora pego a saida pra escrever a resposta
		ObjectOutputStream output = new ObjectOutputStream(cliente.getOutputStream());

		//input.toString() nunca vai ser "true", vai sair alguma coisa como "java.io.ObjectInputStream@872380"
		if ("dir".equals(recebido)) {

			File[] conteudo = new File("C:/temp").listFiles();

			//dis quantos arquivos serão
			output.writeInt(conteudo.length);  

			//eh melhor colocar conteudo.length doque supor que a sua pasta sempre terá 200 arquivos
			for (int i = 0; i < conteudo.length; i++) {  
				output.writeUTF(conteudo[i].toString());  
			}         
		}  

		//mando a resposta
		output.flush();
	}  
}
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SFTPSERVER {

	public static void main(String[] args) throws UnknownHostException, IOException {

		Socket cliente = new Socket("localhost", 5678);
		System.out.println("Conectado com o servidor");

		//primeiro eu pego a saida
		ObjectOutputStream output = new ObjectOutputStream(cliente.getOutputStream());

		//escrevo o que eu quero mandar
		output.writeUTF("dir");

		//agora mando
		output.flush();

		//agora pego a entrada
		ObjectInputStream input = new ObjectInputStream(cliente.getInputStream());

		//e leio o que tem que ser lido
		int numArquivos = input.readInt();

		for (int i = 0; i < numArquivos; i++) {
			System.out.println(input.readUTF());
		}
	}
}
Criado 17 de junho de 2010
Ultima resposta 18 de jun. de 2010
Respostas 4
Participantes 3