Foros del Web » Programación para mayores de 30 ;) » Java »

ayuda con sockets en java

Estas en el tema de ayuda con sockets en java en el foro de Java en Foros del Web. he estado haciendo un servidor y cliente para transferir archivos, para subir archivos del cliente al servidor funciona perfectamente, pero a la inversa, me crea ...
  #1 (permalink)  
Antiguo 10/12/2010, 13:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 10
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta ayuda con sockets en java

he estado haciendo un servidor y cliente para transferir archivos, para subir archivos del cliente al servidor funciona perfectamente, pero a la inversa, me crea un archivo de 0 bytes y no se transfieren.

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

Etiquetas: sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:46.