Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2012, 18:06   #1
v1sc3rr4k
Member
 
Iscritto dal: Nov 2007
Messaggi: 69
[JAVA] Trasferimento file

Salve a tutti,

ho fatto questa esercitazione che mi diceva di implementare un servizio SFTP con i comandi DIR, GET e PUT. In localhost funziona tutto, ho trasferito anche un film, ma tra due computer nella stessa rete non funziona per niente si blocca dopo l'invio!

SERVER
Quote:
package Server;

import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;

public class Server
{
public static void main(String args[]) throws IOException
{
String directory = "C:/Users/Gnegnegne/Documents/Universitą/Reti di calcolatori/workspace/Sftp2/src/Server";
ServerSocket server = new ServerSocket(1500);

File f = new File(directory + "/FileServer");

if(f.mkdir())
System.out.println("Creata nuovo spazio per file condivisi!" + '\n' + f.getPath());
else
System.out.println("Cartella file gią esistente!");



while(true)
new ServerHandler(server.accept() , f.getPath());
}
}
SERVERHANDLER

Quote:
package Server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;



public class ServerHandler extends Thread
{
public ServerHandler( Socket client , String directory)
{
this.client = client;
this.directory = directory;
start();
}

public void run()
{
try
{
DataInputStream inClient = new DataInputStream(this.client.getInputStream());
DataOutputStream outClient = new DataOutputStream(this.client.getOutputStream());
String sentence;

while(true)
{
sentence = inClient.readUTF();
String temp = sentence.substring(0, 3);

if(temp.equalsIgnoreCase("DIR"))
{
String[] files = new File(directory).list();
outClient.writeInt(files.length);

for(int i = 0 ; i < files.length ; i++)
outClient.writeUTF(files[i]);

outClient.writeUTF(directory);
}

else if(temp.equalsIgnoreCase("PUT"))
{
ObjectInputStream oif = new ObjectInputStream(this.client.getInputStream());

File inFile = (File) oif.readObject();
// Qui ho il problema, mi dice FileNotFound

FileInputStream fis = new FileInputStream(inFile);
FileOutputStream fos = new FileOutputStream(this.directory + "/" + inFile.getName());

byte[] buf = new byte[1024];
int i = 0;

while((i=fis.read(buf))!=-1)
fos.write(buf, 0, i);


System.out.println(" ** ricezione completata **");
}
else if(temp.equalsIgnoreCase("GET"))
{
File f = new File( this.directory + "/" + sentence.substring(4));

if(f.exists())
{
outClient.writeUTF("FOUND");

ObjectOutputStream oof = new ObjectOutputStream(this.client.getOutputStream());
oof.writeObject(f);

System.out.println("Inviato il file: " + f.getName() + '\n' + "Client: " + this.client.toString());
}
else
{
System.out.println("Errore file non trovato!");
outClient.writeUTF("ERROR");
}
}

else if (temp.equalsIgnoreCase("QUI"))
break;



else
System.out.println("Comando non valido!");
}


System.out.println("*** CONNESSIONE CHIUSA ***");

}
catch(Exception e)
{
e.printStackTrace();
}
}

private Socket client;
private String directory;
}
CLIENT

Quote:
package Client;

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

import javax.swing.JFileChooser;


public class Client
{
public static void main(String args[]) throws IOException, ClassNotFoundException
{
String directory = "C:/Users/Gnegnegne/Documents/Universitą/Reti di calcolatori/workspace/Sftp2/src/Client/FileClient";
String sentence;
File f;
Scanner s = new Scanner(System.in);

System.out.print("Inserisci un nome client valido: ");

do
{
sentence = s.nextLine();

if( ! (f = new File(directory + "/" + sentence)).mkdir() )
if(f.exists())
{
System.out.println("Bentornato nella tua cartella!");
break;
}
else
System.out.print("Nome non valido reinserisci: ");
else
{
System.out.println("Directory client creata correttamente!");
break;
}
}
while(true);



System.out.println();
System.out.println("****** SFTP ******");
System.out.println();

Socket client = new Socket("localhost" , 1500);
DataInputStream inServer = new DataInputStream(client.getInputStream());
DataOutputStream outServer = new DataOutputStream(client.getOutputStream());

while(true)
{

System.out.println();
System.out.print(">> ");
sentence = s.nextLine();
String temp = sentence.substring(0 , 3);

if(temp.equals("DIR"))
{
outServer.writeUTF(sentence);

int n = inServer.readInt();

for(int i = 1 ; i <= n ; i++)
System.out.println(i + ") " + inServer.readUTF());

System.out.println("Directory: " + inServer.readUTF());
}

else if(temp.equals("PUT"))
{
if(f.list().length !=0)
{
File outFile = null;
JFileChooser choose = new JFileChooser();
int n = choose.showOpenDialog(null);
if( n == JFileChooser.APPROVE_OPTION)
outFile = choose.getSelectedFile();

outServer.writeUTF("PUT " + outFile.getName());


if(outFile.exists())
{
ObjectOutputStream oof = new ObjectOutputStream(client.getOutputStream());
oof.writeObject(outFile);
}
else
System.out.println("Il file che vuoi caricare non esiste!");
}
else
System.out.println("Non puoi caricare dei file, la tua cartella č vuota!");
}

else if(temp.equals("GET"))
{
outServer.writeUTF(sentence);

sentence = inServer.readUTF();

if(sentence.equalsIgnoreCase("FOUND"))
{
ObjectInputStream oif = new ObjectInputStream(client.getInputStream());

File inFile = (File) oif.readObject();

FileInputStream fis = new FileInputStream(inFile);
FileOutputStream fos = new FileOutputStream(f.getPath() + "/" + inFile.getName());

byte[] buf = new byte[1024];
int i = 0;

while((i=fis.read(buf))!=-1)
fos.write(buf, 0, i);

}
else if(sentence.equalsIgnoreCase("ERROR"))
System.out.println("Il file cercato non esiste!");
else
System.out.println("Tu hai detto una stronzata e il server nun č capit nu cazz!");

System.out.println(" [[ ricezione completata ]]");
}

else if(temp.equals("QUI"))
{

outServer.writeUTF(sentence);
break;
}

else
System.out.println("Comando non valido!");


}

System.out.println();
System.out.print("****** CHIUSURA SFTP ******");
}
}
v1sc3rr4k č offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2012, 10:42   #2
sbeng
Senior Member
 
Iscritto dal: Jan 2003
Messaggi: 1352
Ciao,
non ho ben capito. Nel caso dell'errore il client trasferisce al server o riceve il file dal server?
Prova ad aprirti un client ssh e a connetterti al tuo server, vedi se riesci a trasmettere il file (o a riceverlo).
sbeng č offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2012, 12:56   #3
v1sc3rr4k
Member
 
Iscritto dal: Nov 2007
Messaggi: 69
Ok ok ho capito il problema leggendo un po' in giro, ho trovato tutti con questa soluzione:

Lato Ricezione

Quote:
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(new File(path));
byte[] buf = new byte[1024];
int read;
while ((read = is.read(buf)) != -1)
fos.write(buf, 0, read);
Lato Invio

Quote:
FileInputStream fis = new FileInputStream("path/to/file");
OutputStream out = socket.getOutputStream();
byte[] buf = new byte[1024];
int read;
while ((read = fis.read(buf)) != -1)
out.write(buf, 0, read);
La cosa che non capisco č, ma qual'č la condizione di uscita per il ricevente. Perchč quello che manda trova read = -1 ed esce, e chi riceve???
v1sc3rr4k č offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB č On
Le Faccine sono On
Il codice [IMG] č On
Il codice HTML č Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v