Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Una ammiraglia elettrica, da sei o sette posti, con il comfort di viaggio come missione assoluta. Un'auto non per tutti, ma di cui ti innamori dopo pochi giorni, ecco com'è andata la nostra prova di lunga durata
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
Hyper Mini LED con 2.304 zone, DisplayPort 2.1 e Dual Mode: 5K a 165 Hz oppure QHD a 330 Hz: LG propone un monitor da gioco ma dalla buona versatilità creativa, con prestazioni interessanti e un listino di 1.220 euro. Peccato l'alimentatore ingombrante
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-09-2006, 10:27   #1
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
[Java] Problema invio file server-client

Spiego la mia situazione:
nel programma in questione il client si connette al server e tra i vari servizi a lui disponibili c'e' quella di inviare file al server e ricevere file dal server.
La comunicazione e' gestita attraverso i socket e per il "normale" dialogo col server utilizzo due oggeti: uno BufferedReader e l'altro PrintWriter.

Quando arriva il momento di trasferire un file (per esempio da server a client) posso utilizzare questi 2 oggetti che ho (il PrintWriter per il server e il BufferedReader per il client)? Perche' guardando sulla doc il PrintWriter non ha un metodo per inviare dei byte.

Ho provato a fare cio' appoggiandomi ad altri 2 oggetti facendo nel seguente modo:

// Server che invia il file
DataOutputStream out = new DataOutputStream(client.getOutputStream());
FileInputStream in = new FileInputStream(clientFile.getAbsolutePath());
byte buffer[] = new byte[1024];
System.out.println( "Invio file in corso..." );
int i;
while((i = in.read(buffer,0,buffer.length)) != -1){
out.write(buffer,0,i);
out.flush();
}
in.close();
System.out.println( "Invio completato." );

//Client che riceve il file
System.out.println("Ricezione file in corso..");
DataInputStream in = new DataInputStream(socket.getInputStream());
FileOutputStream out = new FileOutputStream(lDir + fileName);
byte buffer[] = new byte[1024];
int i;
while ((i = in.read(buffer,0,buffer.length)) != -1){
System.out.println("ci sono");
out.write(buffer,0,i);
}
out.flush();
out.close();
System.out.println( "Ricezione completata!" );


In questo modo pero' mi si verificano 2 casi:
- il server invia il file, il client non entra nel ciclo while e mi ritrovo in locale il file vuoto.
- il server invia il file, il client entra nel ciclo while ma non esce e rimane in attesa infinita, in locale mi ritrovo il file pieno.

Per cercare di evitare il secondo caso, ho provato a chiudere il DataOutputStream sul server, la trasmissione si completa con successo, ma questo mi fa chiudere il socket e quindi la comunicazione col server.

Come risolvere? Il ciclo while impostato in questo modo e' corretto?
Grazie mille a chi risponde!!!
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 10:32   #2
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Guarda, ho postato in un altro 3d il metodo di invio di un file da un server ad un client.!.
Non so se ti può essere utile... controlla tu stesso!!!

http://www.hwupgrade.it/forum/showthread.php?t=1281150
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 10:53   #3
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
Ma utilizzando DatagramPacket e DatagramSocket, non si effettua una trasmissione UDP?
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 11:19   #4
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Puoi provare con webdav.
Oppure puoi fare un classe che far upload di un file (in rete ne trovi mille) e poi la fai diventare una servlet.
così la richiami e il gioco è fatto
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 14:49   #5
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
Quote:
Originariamente inviato da texerasmo
Puoi provare con webdav.
Oppure puoi fare un classe che far upload di un file (in rete ne trovi mille) e poi la fai diventare una servlet.
così la richiami e il gioco è fatto
Sarebbe bello, pero' devo riuscire a farlo io in java.
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 18:37   #6
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Quote:
Originariamente inviato da misantrophia
Ma utilizzando DatagramPacket e DatagramSocket, non si effettua una trasmissione UDP?
DatagramPacket e DatagramSocket servono per le connessioni UDP ma se hai un pò di esperienza sulla programmazione impieghi pochissimo per trasformare il listato per connessioni TCP
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 00:18   #7
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Eccoti il codice con la connessione TCP...

SERVER

Codice:
import java.io.*;
import java.net.*;
import java.util.*;

public class Server {
	public static final int PORT = 4444; // porta al difuori del range 1-1024 !
	public static final String FILE = "file.txt";
	ServerSocket socket;
	static BufferedReader in = null;
	static boolean moreLines = true;
	
	public Server(){
		try {
			// creazione della socket 
			socket = new ServerSocket(PORT);
			System.out.println("Socket: " + socket);
		} catch (Exception e) {System.err.println("Unable to create the socket");}
		try {
			// associazione di uno stream
			//	di input al file da cui estrarre le linee 
			in = new BufferedReader(new FileReader(FILE));
			System.out.println("File "+FILE+" opened");
		} catch (FileNotFoundException e)
		{
			System.err.println("Could not open");
		}
	}

	public static void main(String[] args) throws IOException {
		System.out.println("LineServer: started");
		Server server=new Server();
		Socket client = server.socket.accept();
		PrintWriter out = new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true);
	
		while (moreLines) {
			try {
				
				
				// 	preparazione della linea da inviare 
				String dString = null;
				if (in == null) 
					dString = new Date().toString();
				else 
					dString = getNextLine();

				if (dString!=null) {
					//invio linea file
					out.println(dString);
					System.out.println("Sending packet to "+client.getInetAddress()+" port:"+client.getPort());
				}
				else{
					out.println("null");
				}
			} catch (Exception e) {
				e.printStackTrace();
				moreLines = false;
			}
		}
	
		System.out.println("No more lines. Goodbye.");
		System.out.println("LineServer: closing...");
		in.close();
		out.close();
		server.socket.close();
	}

	static String getNextLine() {
		String returnValue = null;
		try {
			if ((returnValue = in.readLine()) == null) {
				in.close();
				moreLines = false;
				returnValue = null;
				//returnValue	= "No more lines. Goodbye.";
			}
		} catch (IOException e) {
			returnValue = "IOException occurred.";
		}
		return returnValue;
	}
}
CLIENT

Codice:
import java.io.*;
import java.net.*;


public class Client {
	
	public static void main(String[] args) throws IOException {
		// 	creazione della socket
		InetAddress serverAddress = InetAddress.getLocalHost();
		int port = 4444;
		
		Socket socket = new Socket(serverAddress, port);
		System.out.println("LineClient: started");
		System.out.println("Socket: "+ socket);
		PrintWriter out = new PrintWriter(new FileWriter("ric.txt"), true);
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		while(true){
			//ricezione linea file.
			String received = in.readLine();
			if(received.trim().equals("null"))
				break;
			else
				out.println(received.trim());
		}
		System.out.println("LineClient: closing...");
		out.close();
		in.close();
		socket.close();
	}
}
é normale che per funzionare bisogna che sia presente il file "file.txt" nella cartella delle classi!
Altrimenti verra catturata l'eccezione FileNotFoundException!

Ciao ciao
__________________
L'unico computer sicuro è un computer spento!!!

Ultima modifica di TempestaT400 : 19-09-2006 alle 19:43.
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 10:19   #8
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Questo è un esempio di connessione webdav.
Per fare un test di basta prendere tomcat abilitare webdav

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

import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpURL;
import org.apache.webdav.lib.WebdavResource;

public class SlideTest {

public static void main (String args[])
{
try
{
HttpURL hrl =
new HttpURL("http://192.168.0.110:8080/webdav/mino");
//user e pass se la gestisci la coas con tomcat-user.xml
hrl.setUserinfo("viru","tomcat");
WebdavResource wdr =
new WebdavResource(hrl);
File fn = new File("SlideTest.class");
//prendo unfile
// wdr.getMethod(fn);
String path = wdr.getPath() + "/" + fn;
//metto un file
boolean rslt = wdr.putMethod(path,fn);
System.out.println("path " + path);
System.out.println("the value of boolean is " + rslt);
//creo una folder in remoto
//boolean status = wdr.mkcolMethod(wdr.getPath() + "/arma");
//System.out.println("MKCOL Status = " + status);
wdr.close();



}
catch(MalformedURLException mue)
{
}
catch(HttpException he)
{
}
catch(IOException ioe)
{
}
}
}



OK funziona TempestaT400 manca una parentesi finale in Server.java,oppure ho sbagliato a fare cp cv
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 19:44   #9
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Si, in effetti ho ricontrollato e mancava una parentesi.!.
Grazie... Cmq,... E' logico che funziona... avevi dubbi'???

PS: ho modificato il codice aggiungendo la parentesi!!!
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2006, 09:39   #10
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
ASSOLUTAMNETE NO!!!
ERA PER DARE CONFORTO A MISANTROPHIA
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2006, 11:11   #11
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e...
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
TV 55 pollici in offerta: Xiaomi 4K a 32...
Robot per le piscine in offerta su Amazo...
Nessun downgrade a Vera e Rubin Ultra, s...
Ho costruito un agente IA locale dentro ...
TOP 10 Amazon del weekend, si inizia col...
Google sta costruendo un data center da ...
SSD NVMe 4TB in offerta: Acer Predator e...
Robot aspirapolvere in offerta su Amazon...
Musica e IA, la pacchia sta finendo: Sun...
Prezzo lampo e a tempo: crolla a 588,99€...
Oltre 1.500 miliardi di dollari: il merc...
'Sorry, typo': l'IA cancella tutto il pr...
The Legend of Zelda sarà l'ultima...
NVIDIA CMP 170 HX: il mining l'aveva abb...
Philips Shaver S9000 a 181,99€: il rasoi...
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: 10:17.


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