Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
La seconda generazione della citycar elettrica di Dacia passa alla piattaforma RGEV small di Renault Group, cresce di 15 cm in lunghezza e 18 cm in larghezza, adotta un motore da 80 CV e una batteria LFP da 27,5 kWh per 250 km WLTP. Prezzi da 17.900 euro, produzione a Novo Mesto in Slovenia.
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-09-2006, 11: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, 11: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, 11: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, 12: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, 15: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, 19: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, 01: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 20:43.
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 11: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, 20: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, 10: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, 12: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


Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa Nuova Dacia Spring, del modello precedente resta...
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Due Mac agli antipodi in forte sconto su...
Quick Spectral Super Resolution (QSSR): ...
AMD Ryzen, prezzi interessanti su AliExp...
Zenbook S è un MacBook Air che co...
Motorola moto g56 5G a soli 233€ su Amaz...
Aerei a terra negli USA? Nessun attacco,...
Amazon, pioggia di offerte sulle bici el...
Intel Core Ultra 7 260K esiste ma non po...
Una lettera promette una rivolta contro ...
SpaceX ha lanciato la missione Flight 15...
NVIDIA cerca il successore di Jensen Hua...
La CNSA annuncia la missione Tianwen-4 v...
Una valanga di wafer e memorie incombe s...
Microsoft 365, miglioramenti dopo il dow...
Un'IA attacca la tua azienda, ma per dif...
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: 09:23.


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