Ajuda em socket

1 resposta
platnum

estou tentando trabalhar com socket queria q alguem potasse um exemplo com socket

1 Resposta

tinorberto

fiz um trabalho na faculdade talvez te ajude.
E para a transferência de arquivos usando socket java. E bem simples, talvez ajude. flw

/*
 Cliente que recebe um arquivo de um servidor utilizando TCP
 Tiago da Costa Norberto
  27/06/2010
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;

public class Client {

	public static void main(String[] args) {
		
		 System.out.println("\n\nCliente inicializado....");  
		
		//Declaro o socket cliente
		Socket socket = null;
		
		//criar um fluxo de saida de dados
		BufferedInputStream in = null;
		
		//Declaro o leitor para a entrada de dados
		BufferedOutputStream out =null;
		
		//arquivo utilizado na transfericia
		File arquivo= new File("novosockets.pdf");
		
		try{
			
			//Cria o socket com o recurso desejado na porta especificada
			socket = new Socket("127.0.0.1",7000);
						
			//associa um fluxo de entrada ao socket
			 in =new BufferedInputStream(socket.getInputStream());  
			 
	
			//associa um fluxo de saida a um arquivo	   
			 out =new BufferedOutputStream(new FileOutputStream(arquivo));  
			
			 //percorreer a entrada e ir escrevendo em
			 int len = 0;  
			  byte[] buffer =new byte[2048];    
			 
			  System.out.println("Recebendo arquivo.");  
			    
			  while ((len = in.read(buffer)) > 0) {  
			              out.write(buffer, 0, len);  
			           }  
			 
			 
			  System.out.println("Arquivo recebido");      	 
			 
			  //imprime os dados do arquivo
			  System.out.println("Nome do arquivo: "+arquivo.getName());
			  System.out.println("Tamanho do arquivo: "+arquivo.length());
			  
		//Trata possíveis exceções
		}catch(IOException e){
			
		System.out.println("Erros com o socket.");
		
		//bloco que devolve os recursos para o sistema
	
		}finally{
			
			try{
				//fecha o fluxo 
				out.close();  
		      	 out.flush();
				//Encerra o socket cliente
				socket.close();
		
			}catch(IOException e){}
		
		}

	}
}

Servidor

/*
 Srvidor que envia um arquivo para um cliente utilizando TCP
 Tiago da Costa Norberto
  27/06/2010
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

	public static void main(String[] args) {
		
		//Declaro o ServerSocket que fica escutando canal , usando o acept
		ServerSocket serverSocket=null; 
		
		//Declaro o Socket para ser utilizado na comunicação de comunicação
		Socket socket= null;
		
		//fluxo de saida para ser associado a um arquivo
		BufferedInputStream in =null;
		
		//cria um objeto para associar com o envio de dados do socket 
		BufferedOutputStream out = null;
		
		//arquivo utilizado na transfericia
		File arquivo= new File("sockets.pdf");
		
		try{
			System.out.println("\n\nServidor esperando...");
			
			//Cria o serverSocketerSocket na porta 7000 se estiver disponível
			serverSocket = new ServerSocket(7000);
		
			//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
			//este socket sea utilizado para enviar e receber daddos
			socket = serverSocket.accept();
			
			//informações sobre a conexão
			InetAddress info = socket.getInetAddress();
			String ip = info.getHostAddress();
			String hostname = info.getHostName();
			
			System.out.println("Conectado ao ip: "+ip +" com o host de nome: "+hostname);
			
			
	//parte de manipulação do arquivo		
	try{
	 in =new BufferedInputStream( new FileInputStream(arquivo)); 
	}
		catch(IOException e){
			//Imprime uma notificação na saída padrão caso haja algo errado.
			System.out.println("Erro na abertura do arquivo.");
		}
		
	//cria um objeto para associar com o envio de dados do socket 
	out = new BufferedOutputStream(socket.getOutputStream());  
	
	//percorrer o arquivo e ir enviando para cliente
	  int len = 0;  
	  byte[] buffer =new byte[2408];          
	          
	  System.out.println("Nome do arquivo: "+arquivo.getName());
	  System.out.println("Tamanho do arquivo: "+arquivo.length());
	  
	  System.out.println("Iniciando a transferencia do arquivo");
	
	  //contar o tempo da transfericia
	  long tempoInicio = System.currentTimeMillis();
	  
	          while ((len = in.read(buffer)) > 0) {  
	             out.write(buffer, 0, len);  
	         
	          }  
	          
			
	 long tempoFinal = System.currentTimeMillis();
	 
	 long tempo = (tempoFinal -tempoInicio);
	 
	 System.out.println("Finalizado transferencia do arquivo, gastando "+tempo + "ms \n Transferencia finalizada");
	          
		//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io	
		}catch(IOException e){
		
			//Imprime uma notificação na saída padrão caso haja algo errado.
			System.out.println("Erro de execução com o socket");
			//bloco que devolve os recursos para o sistema
		//devolve o recurso para o sistema
		}finally{
			
			try{
				out.flush();
				//Encerro o socket de comunicação
				socket.close();
				//Encerro o serverSocketerSocket
				serverSocket.close();
				
			}catch(IOException e){
				System.out.println("Erro ao fechar o arquivo");
			}
		}
		
	}
}
Criado 26 de agosto de 2010
Ultima resposta 26 de ago. de 2010
Respostas 1
Participantes 2