aqui esta mi codigo. espero que puedan ayudarme
cliente:
Código:
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author vLAW
*/
public class client2 {
Socket client= new Socket();
Socket client2= new Socket();
DataOutputStream out= null;
DataInputStream in=null ;
FileInputStream origen=null;
FileOutputStream pt=null ;
String[] lista = new String[100];
////////////////////////////////////////////////
public String[] direcciones(String direccion) {
if(direccion.equals("1")){//------------------------------------si es uno se hace la actualizacion de la carpeta
try{
client= new Socket("localhost",6800);
out= new DataOutputStream(client.getOutputStream());
in= new DataInputStream(client.getInputStream());
out.writeUTF("1");
boolean x=true;//este while, ca`tura los datos que provienen del servidor
int xx=0;
while(x){
lista[xx]=in.readUTF();
if(in.readUTF().equals("fin"))
x=false;
xx++;
}
}
catch(Exception e){System.out.println("no se pudo enviar el mensage de peticion");}
}
//------------------------------------------------------------------------------
//---------------------------------------------------si no se hace un envio a el servidor
//------------------------------------------------------------------------------
return lista;
}
public void subir(String direccion, String nombre){
try{
client= new Socket("localhost",6800);
pt = (FileOutputStream)client.getOutputStream() ;//para transferencia de archivos
origen = new FileInputStream(direccion);//para transferencia de archivos (lo que se va a enviar al server)
out= new DataOutputStream(client.getOutputStream());
out.writeUTF(nombre);
//System.out.println(in.readUTF());
client.sendUrgentData(100);
byte[] buf = new byte[1024];
int len;
while ((len = origen.read(buf)) > 0 ){
pt.write(buf, 0, len);
}
pt.close();
origen.close();
client.close();
}catch(Exception e){
System.out.println("no se pudo copiar el archivo");
}
}
public void descargar(String descarga, String opcion){
try {
client= new Socket("localhost",6800);
out= new DataOutputStream(client.getOutputStream());
out.writeUTF(opcion);
out.writeUTF(descarga);
} catch (IOException ex) {
System.out.println("no se pudo enviar el mensage");
}
try{
//ABRIMOS UN BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO
//CREAMOS LA INSTANCIA PARA ESCRIBIR EL ARCHIVO EN DISCO
FileOutputStream destino = new java.io.FileOutputStream("C:/descargas2/nuevo");
byte[] buf = new byte[1024];
int len;
out.writeUTF("envia algo!!!!!!!!!!!!!!!!11");
while ((len = in.read(buf)) != -1) {
System.out.println("carajo");
destino.write(buf, 0, len);
}
in.close();
destino.close();
}
catch(Exception b){System.out.println("no se pudo copiar el archivo");}
}
}
servidor
Código:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {//implements Runnable
ServerSocket server;
DataOutputStream out;
DataInputStream mensage;
String eleccion;
Socket client= new Socket();
String directorio;
FileOutputStream pt=null ;
FileInputStream origen=null;
public Servidor() {
try {
//CREAMOS EL SOCKET DEL SERVIDOR
server=new ServerSocket(6800);
System.out.println("Servidor corriendo...");
} catch(Exception e) {
System.out.println("Error al conectarse al puerto\n"+e);
System.exit(1);
}
}
public void run() {
while (true) {
try {
//ESPERA A QUE LLEGUE UN CLIENTE
client=server.accept();
out= new DataOutputStream(client.getOutputStream());/////////////////////////
mensage= new DataInputStream(client.getInputStream());///////////////////////////
} catch(java.io.IOException e) {
System.out.println("No se pudo establecer conexión " + e.getMessage());
}
try {////////////////////////////////////////
eleccion=mensage.readUTF();
System.out.println(eleccion);
}
catch(Exception e) {
System.out.println("mierda1");
}
//------------------------------------si es uno se hace la actualizacion de la carpeta
if(eleccion.equals("1")|| eleccion.equals("2"))
{
if(eleccion.equals("1")){
informacion();
}
else{
descarga();
}
}//----------------------------------------------------------------
else//----------------------------------------------si no, es una carga de arhivo
{
carga();
}
//--------------------------------------------------------------
}
}
public static void main(String a[]) {
Servidor servidor = new Servidor();
// Ponemos a correr nuestro hilo servidor
//new Thread(servidor).start();
servidor.run();
}
public void descarga(){
String copiadirectorio;
copiadirectorio=directorio;
try{
String archivo4=mensage.readUTF();
directorio= directorio.concat("\\"+archivo4);
System.out.println(directorio);
}
catch(Exception e){
System.out.println("no se pudo enviar el mensag de descarga");
}
descargareal(directorio);
directorio=copiadirectorio;
}
//---------------------------------------------------------------en proceso
public void descargareal(String archivo ){
try{
client= new Socket("localhost",6800);
pt = (FileOutputStream)client.getOutputStream() ;//para transferencia de archivos
origen = new FileInputStream(archivo);
out= new DataOutputStream(client.getOutputStream());
client.sendUrgentData(100);
byte[] buf = new byte[1024];
int len;
System.out.println(mensage.readUTF());
while ((len = origen.read(buf)) > 0 ){
pt.write(buf, 0, len);
System.out.println(buf);
}
pt.close();
origen.close();
client.close();
}catch(Exception e){
System.out.println("no se pudo copiar el archivo");
}
}
//---------------------------------------------------------------
public void carga(){
try{
//ABRIMOS UN BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO
InputStream in = client.getInputStream();
//CREAMOS LA INSTANCIA PARA ESCRIBIR EL ARCHIVO EN DISCO
FileOutputStream destino = new java.io.FileOutputStream("C:/descargas/"+eleccion);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
destino.write(buf, 0, len);
}
in.close();
destino.close();
}
catch(Exception b){System.out.println("no se pudo copiar el archivo");}
}
public void informacion(){
try {
///--------------------------------se hicieron 2 for, por que si no el cliente solo recuperava el nombre del archivo yuno no, uno si y uno no y asi...
File archivo= new File("C:/descargas/");
directorio= archivo.toString();
String []archivos = archivo.list();
for(int x=0;x<archivo.list().length;x++){
System.out.println(archivos[x]);
out.writeUTF(archivos[x]);
}
for(int x=1;x<archivo.list().length;x++){
System.out.println(archivos[x]);
out.writeUTF(archivos[x]);
}
out.writeUTF("fin");
}
catch(Exception e) {
System.out.println("mierda2");
}
}
}
si da algunos errores, es por que son algunos datos que se obtenian de una interface que hice del net beans, pero solo son numeros, "1","2", y el nombre del archivo