Programação para sockets

10 respostas
jromulomenezes

Tenho que elaborar uma aplicação cliente-servidor baseado no protocolo TCP para realizar upload e download de arquivos.
O cliente ao se conectar deverá receber uma listagem dos arquivos disponíveis para download.
A aplicação deverá permitir que o cliente selecione a operação: UPLOAD ou DOWNLOAD;
Para UPLOAD, o cliente deverá fornecer o diretório e o nome do arquivo a ser enviado ao servidor. O servidor deverá receber o arquivo e gravá-lo em disco, numa pasta específica.
Para DOWNLOAD, o cliente deverá indicar o nome do arquivo, e o servidor irá enviá-lo ao cliente, que o gravará em uma pasta específica.

Alguem tem esse codigo fonte ou pode me indicar um site para fazer essas pesquisas.

atenciosamente,
BoBSurf.
obs: Se alguem ja tiver desenvolvido esse aplicativo pode me enviar para meu e-mail:[email removido]

10 Respostas

T

Isso é uma aplicação típica de FTP, portanto a maneira mais segura e eficiente de fazer isso é usar um servidor SFTP ou SCP. Procure por SFTP e SCP, que irá achar muita coisa boa, testada e de graça. Não reinvente a roda.

jromulomenezes

Mas tem que ser utilizando:
Sockets
FileInputStream
FileOutputStream
Thread
Consegui akgumas coissas da comunicação dos sockets esta ok! agora preciso de exemplo para os outros.

T

Você quer resolver uma lição de casa, é isso? Mandem uma MP ou um email para ele então.

De modo geral, transmissão e recepção de arquivos é mais chato que parece (é por isso que ele quer as coisas prontas :stuck_out_tongue: )

jromulomenezes

Sim, preciso muito pois não estou conseguindo rodar se quiser mando as partes que ja consegui.

T

A primeira coisa é definir um protocolo sobre o TCP/IP.
Por acaso você pode explicar como é que você fez o seu protocolo?
Por exemplo, como é que você envia os nomes dos arquivos, ou como você envia o conteúdo dos arquivos?

jromulomenezes

1º Tenho que por o servidor no ar.

import java.util.Scanner;

import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;

public class TCPServer {

public static void main(String[] args) {
	Scanner s = new Scanner(System.in);
	String textoEntrada;
	int porta;
	
	System.out.println("Criando socket servidor");
	System.out.print("Digite o numero da porta:");
	porta = s.nextInt();
	
	ServerSocket servidorSocket = null;
	Socket clienteSocket = null;
	
	try {
		servidorSocket = new ServerSocket(porta);
		
		System.out.println("Servidor no AR!!!");
					
		clienteSocket = servidorSocket.accept();
		
		System.out.println("Conexao com Cliente aceita!!!");
		
		DataOutputStream saida = new DataOutputStream( 
			clienteSocket.getOutputStream()
		);
		
		DataInputStream entrada = new DataInputStream( 
			clienteSocket.getInputStream()
		);
		
		textoEntrada = entrada.readLine();
		
		System.out.println("Mensagem do cliente: " + textoEntrada);
		
		saida.writeBytes(textoEntrada.toUpperCase() +'\n');

	} catch(IOException e){
		System.out.print("Erro: " + e.getMessage());
	} finally {
		try {
			clienteSocket.close();
			servidorSocket.close();
		} catch (IOException e){
		}
	}
}

}

jromulomenezes

2º Crio uma conexão com o cliente

import java.util.Scanner;

import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;

public class TCPClient {

public static void main(String[] args) {
	Scanner s = new Scanner(System.in);
	String textoEntrada, textoSaida, host;
	int porta;
	
	System.out.println("Criando socket cliente");
	System.out.print("Digite o nome do host:");
	host = s.next();

	System.out.print("Digite o numero da porta:");
	porta = s.nextInt();
	
	Socket clienteSocket = null;
	
	try {
		clienteSocket = new Socket(host,porta);
		
		DataOutputStream saida = new DataOutputStream( 
			clienteSocket.getOutputStream()
		);
		
		DataInputStream entrada = new DataInputStream( 
			clienteSocket.getInputStream()
		);
		
		System.out.print("Digite sua mensagem: ");
		textoSaida = s.next();
		
		saida.writeBytes(textoSaida +'\n');
		
		textoEntrada = entrada.readLine();
		
		System.out.println("Servidor: " + textoEntrada);
		
	} catch(IOException e){
		System.out.print("Erro: " + e.getMessage());
	} finally {
		try {
			clienteSocket.close();
		} catch (IOException e){
		}
	}
}

}

jromulomenezes

Posso usar essa tread?

public class AplicaThread {

public static void main(String[] args) {

Thread t1 = new NumerosThread(T1);
NumerosThreadRun tRun = new NumerosThreadRun("T2");
	
	Thread t2 = new Thread(tRun);
	
	
	t1.setPriority(Thread.MIN_PRIORITY);
	t2.setPriority(Thread.MAX_PRIORITY);
	

	t1.start();
	t2.start();

	
	 
}

}

T

Hum… isso ainda está bem cru mesmo.

Primeiro pense um pouco nas operações necessárias, defina um protocolo que ambas as partes têm de seguir, e só aí comece a programar.

jromulomenezes

Vou ter que sair, daqui a pouco eu volto, se alguem conseguir sobre FileInputStream, FileOutputStream ficaria muito grato!

Criado 7 de outubro de 2008
Ultima resposta 7 de out. de 2008
Respostas 10
Participantes 2