Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
Batterie allo stato solido dietro l'ango...
Gears of War: E-Day raggiunge la fase Go...
GTA 6 avrà un'edizione fisica, ma...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
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: 16:03.


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